python函数:
1.python中函数的定义
函数代码是以def开头加函数名进行定义,具体格式如下:
def 函数名():
代码块
其中需要注意的有以下几个方面:
1.函数名的命名规范必须遵守标识符的命名规范
2.括号内为函数的参数
3.代码块为函数具体的实现
需要注意的是该部分只是定义了函数,并没有对函数进行调用,只有对函数进行调用,才能够使用到函数的具体实现,想要让这些代码发挥作用,就必须要对函数进行调用
接下来就来说一下函数的调用
2.函数的调用
函数调用的格式就是函数名() 括号内是参数列表
函数调用的格式如下:
函数名()
3.函数的参数
参数有两种:分为实参和形参
定义时小括号中的参数为形参,用来接收参数
调用时小括号中的参数为实参,用来作为实参进行传递
4.函数的具体使用细节
1.函数的参数列表可以是多个,也可以没有
如果有需要,可以是多个,当然如果不需要有参数,也可以没有参数
写几个简单函数来论证一下吧
def f1():
print("没有参数列表")
def f2(n1):
return n1
def f3(n1,n2):
return n1+n2
f1()
print(f2(1))
print(f3(1,2))
运行结果如下:
2.函数名的命名规范需遵循标识符的命名规则
3.定义在函数中的变量是局部的,函数外不生效(局部变量)
在函数内部定义的变量,在函数外不可使用
在f1函数调用之后 之后进行print操作时,会有报错
这样子用一个新的变量去接收返回值就可以避免这个问题了
4. 对于同一个文件,出现两个名字相同的函数,采取就近原则调用
def f1():
print("第一个f1被调用")
def f1():
print("第二个f1被调用")
f1()
运行结果如下:
得以验证
需要注意的是:Java中有函数的重载,但python中没有传统意义上的函数重载
def f():
print("第一个f被调用")
def f(n):
print("第二个f被调用")
f()
观察上述代码中的两个函数,函数名相同,故属于同名函数,在同一个文件中,函数的调用遵循就近原则,所以当f()调用时会优先调用第二个f(n),但是显而易见第二个f()调用时需要传入一个参数,但是真正在调用时并没有传入参数,所以会报错
报错的意思也就是调用时缺少了一个参数n,并不会像Java函数重载那样去执行第一个f()
5.调用函数时,函数的参数,是按照位置传递参数的,这种叫做位置参数,传递的实参和定义的形参顺序和个数必须一致,同时定义的形参,不用指定数据类型,会根据传入的实参决定
def info(name,age,height):
print("name="+name+" age="+str(age)+" height="+str(height))
info("小张",18,167)
info("小张",167,18)
例如上边的这段代码:
先看第一个调用,位置参数即就是按照位置将参数传入,那么也就是age为18,身高为167;但是如果按照第二个调用的话,那么age就是167,身高就是18,显然不符合常理,但是python并不会自己去进行排序,传递的实际参数的顺序就是定义时形参的顺序,同时个数也必须保持一致,不能少不能多
但是如果你非常不想按照顺序进行传参的时候,也可以选择以下这种方式,也即关键字参数
def info(name,age,height):
print("name="+name+" age="+str(age)+" height="+str(height))
info("小张",18,167)
info(height=167,name="小张",age=18)
运行结果如下:
当然也可以混着用
def info(name,age,height,score):
print("name= "+str(name)+"age= "+str(age)+"height= "+"score= "+str(score))
info("小张",18,167,99)
info("小张",18,score=99,height=167)
运行结果一样,但是需要注意的是,混着用的时候需要把按照位置排序的那几个(也就是没有特地指明视为那几个按照顺序放在前面),剩下的有指代性质的在他们之后,然后在他们后边的位置随意
6.函数可以有多个返回值
下面用一个简单的函数进行举例说明:
def f(n1,n2):
return n1+n2,n1-n2
print(f(2,1))
r1,r2 = f(2,1)
print(r1,r2)
再次声明一下,函数的返回值不唯一
7.函数支持关键字参数
使用关键字参数时可以不受传递顺序的限制,函数调用时,可以通过“形参名=实参”的形式传递参数,具体在注意事项5中有详细说明,此处不再赘述
8.python中支持调用另一个文件中的函数
要想使用另一个文件的函数,必须先将另一个文件用import导入
在调用时需要用文件+"."+函数名来进行调用
下面为具体实例:
在hello中创建了两个文件,分别是hello文件和f文件
hello文件具体代码如上
f文件代码如下:
要想在hello文件中调用f文件中的f函数,就必须在hello文件中先 import f 进行导入
然后具体调用时需要按照 文件+"."+函数名来进行调用 也即 f.f1()
就能够进行跨文件调用了,运行结果如下:
9.python中支持默认参数/缺省参数
缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值,所有位置必须出现在默认参数前,包括函数定义和调用
用一段代码来距离演示一下
运行结果如下:
不难发现,编译器并无报错,可以说明缺省参数可以在调用时没有给出参数值时使用缺省参数的默认值
但是调用时有传入的实参值时:
有如下运行结果:
可以证明,缺省参数就是可以在没有传入实参时可以使用缺省参数的值进行调用,但是在传入了实参的值时,在调用时就以传入的实参的值为准
要注意的是,缺省参数,必须要放在默认参数之后,否则就会报错
10.函数支持可变参数/不定长参数
使用情况:当不知道需要使用多少个位置参数时,此时就需要使用元组
传入的多个实参,会被组成一个元组(tuple)
元组可以存储多个数据项
def sum(*arg):
total = 0
#对args进行遍历,即对该元组进行遍历
for ele in arg:
#注意是arg不是args
total += ele
return total
result = sum(1,2,3,4)
print(result)
11.当传入不知道多少个关键字参数时
传入的多个关键字参数,会被组成一个字典(dict),
字典可以存储多个 键=值 的数据项
def sum(**arg):
for ele in arg:
print(str(ele)+" ")
sum(name=1,age=2,score=3,min=4)
注意区分 位置参数用一个 * 关键字参数用 **
python中函数使用的细节大概就这么多吧,以后要是有补充还会再发,目前就想起来这么多