Python3函数,形参,实参,返回值及相关细节
Python3基础——函数
(赠言):编程实现某项功能最终都依赖与函数,函数是实现某个功能的代码集合体,实现某一逻辑功能的都可以定义成一个函数,它给程序提供了简洁,可读的优良特质。大家在编程过程中要尽量将某一逻辑功能的代码块定义成函数,这样能增加代码的可阅读性同时能是程序看起来更简洁。
-
函数声明定义:Python函数定义并不像c++,java,c.....定义那样c++函数定义.
- c,c++,java函数定义:
(返回类型) 函数名(参数列表)
- c,c++,java函数定义:
---返回类型有 void(无返回),int(返回一个整型值) ,double(返回一个双精度浮点值).....等等
如:void getName(string name) ,int getNumber(int number) 。
下面我们来看看Python怎么进行函数定义的
- Python函数定义:
def 函数名 (参数列表):
def是关键字,目的是让Python知道你定义了一个函数,而不是其他
例子如:
**def get_name(name):
def get_number(number):**
-------为什么函数命名会是这样呢?我在Python基础--Python命名规范一文中详细阐述了
-------至于参数见下
-
参数:参数是用户或者程序员向函数传递信息的媒介或者说形式;参数分为:形参,实参
- 形参:就是函数声明给出的括号内的 (目的:形参只是一个形式,让Python知道这个函数需要这要的参数,没有实际意义)如:def get_name(name):中的name就是形参。
- 实参:函数调用括号内出现的(具有忒定意义的值,有实际值,实际含义)
如我们调用函数
get_name("Daming")
调用函数时括号内出现的“Daming”这一字符串实体就是实参,有实际值,实际含义。
-
形实对应相关问题:下面是关于可变参数,默认参数等一系列问题
- 位置实参 *:及函数调用时参数的位置不能随意变化,否则可能出现逻辑错误或者得不到你想要的结果
如程序:
- 位置实参 *:及函数调用时参数的位置不能随意变化,否则可能出现逻辑错误或者得不到你想要的结果
def get_people_hobby(name,hobby): """用于描述某人的爱好""" print(name," likes ",hobby) get_people_hobby("Daming".title(),"football") get_people_hobby("football".title(),"Daming")
结果:调换实参位置之后并没有出现我们想要的结果------结论不可随便改变实参位置
1. **关键字实参**:及在调用函数过程中将形参与实参绑定在一起,这样不论位置怎样都能得到我们想要的结果
例:
def get_people_hobby(name,hobby): """用于描述某人的爱好""" print(name," likes ",hobby) #get_people_hobby("Daming".title(),"football") #get_people_hobby("football".title(),"Daming") get_people_hobby(name="Xiaohong".title(),hobby="piano") get_people_hobby(hobby="piano",name="Xiaohong".title()
运行结果:当形参与实参绑定在一起之后,位置的改变并不会引起结果的改变
1. **给参数设定默认值**:有的时候参数是用默认值的 (**注意:**有默认值得参数一定**位于所有未给**默认值形参的**后面**) 如当这样定义函数时定义(**错误**):
def discrible_default(type="human",feature):
IDE给你指出错误:未给默认值参数位于有默认值参数之后
**正确定义方式**:
def discrible_default(feature,type="human"): print(type.title()," is ",feature)
当我们**调用有默认参数**的函数时:
若实参比形参少,Python会优先将前面的形参与给出的实参绑定(及按照先后顺序进行形参与实参绑定)有默认值得参数将会采用默认值:如下:
def discrible_default(feature,type="human"): print(type.title()," is ",feature) discrible_default("intelligent")
结果
当然有默认值的参数也可以改变值:如下:
def discrible_default(feature,type="human"): print(type.title()," is ",feature) discrible_default("intelligent") discrible_default("fool","pig".title())
结果:
总结:要想程序按照我们想的正确方向运行,形参和实参的绑定是关键,只要形参和实参正确绑定,那么结果就能正常运行,出现运行结果错误的无非是形参与传递的实参就绑定错误。
1. ** 传递任意数量参数的函数定义:**用于预先不知道函数需要接受多少实参
def get_type(*types): # *type中的*相当于让Python创造一个名为type的空元组 print(types) get_type("human","monkey") #两个实参 get_type("dog","pig","cat") #三个实参
 1. **传递任意关键字实参:**用于接受任意数量的实参,但是不知道传递给函数的是什么样的信息
如下程序:要求:创建一个用户信息,基本的有名字但是每个用户可以自己添加自己不同数量不同类型的详细信息
def build_user_information(name,age,**info): """创建用于存储基本信息和用户自定义信息的字典""" users_information={} users_information["name"]=name users_information["age"]=age for key,value in info.items(): users_information[key]=value return users_information print(build_user_information("Daming",32,address="beijing",work="programmer")) #用户自己传递了自己的家庭住址和职业 print(build_user_information("Lihua","18",hobby="swim",height=170,midle_school_address="linshui")) #除了名字,年龄外,用户自己传递了自己的爱好,身高以及中学学校地址
结果:
- 返回值:有时候我们需要利用函数处理一些数据,然后将处理后的数据返回给用户,这时候就要用到返回值
Python利用关键之return来达到返回数据的目的 return 后面的返回值得类型是多种多样的 可以是int ,double,string,也可以是元组,列表以及字典
如下实例:
def get_information(*info): """创建一个列表用于存储用户输入的信息,并返回这个列表""" information=[] for item in info: #循环,将用户输入的信息复制到information这个列表中 information.append(item) return information #用于返回information列表 print(get_information("Daming",21,"student"))
结果:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
leetcode算法题解(Java版)-16-动态规划(单词包含问题)
一、递归 题目描述 Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 思路 碰到二叉树的问题,差不多就是深搜、广搜,递归那方面想想了,当然如果要考虑一下空间、时间,还需要进行剪枝和压缩处理。这题比较简单:判断两个树是否相等,可以递归的判断子树是否相等,最后找到边界条件就是是否都为空,都不为空时节点里面的值是否相等。 代码 /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boole...
- 下一篇
KernelML——一种广义机器学习算法
最近,我创造了一个自定义的“粒子优化算法”,并制作了一个叫做KernelML的Python包。创造这种算法是为了给数据分析师和数据科学家提供一个针对复杂损失函数和非线性系数的广义机器学习算法。优化算法通过简单机器学习和概率模拟的组合,使用损失函数、输入和输出矩阵以及随机采样器(可选)来寻找最优参数。目前,我在研究更多功能,希望项目最终能够开源。 使用示例: 以经纬度坐标的聚类问题作为范例,K均值的聚类方法使用欧氏距离来区别观测值。但是,经纬度坐标间的欧氏距离并不能直接映射为Haversine距离。这意味着,如果将0和1之间的坐标进行归一化,则距离无法精确的在聚类模型中得以表示。最好的解决方案就是找到坐标投影,使该点质心的Haversine距离等于欧式空间中的投影距离。 以上坐标变换在聚类解决方案中的缩放和使用,将相对于中心的Havers
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,CentOS8安装Elasticsearch6.8.6