函数定义&调用
为代码块起一个名字,在需要执行代码块时,直接使用函数名调用
定义
def hello():
print("hello,world!")
如上示例:
使用def
关键字定义函数
hello
为函数名,需要满足Python变量的命名规范
小括号()
定义函数参数
冒号:
表示函数定义结束
使用缩进代码块定义函数体
调用
hello()
使用
函数名()
进行函数调用(执行函数体内代码)
函数返回值
函数一般会在经过一系列语句处理后为调用者返回执行结果
def return_hello():
return "hello,world!"
调用
>>> rt = return_hello()
>>> rt
'hello,world!'
在函数体内使用return
关键字为调用者返回执行结果
使用变量赋值的方式用变量接收函数执行结果
函数可以有多个返回值(元组类型),并使用多个变量接收函数返回值
参数定义 & 调用(标准调用)
示例:
def add(a,b):
print(a,'+',b,'=',a+b)
>>> add(1,2)
1 + 2 = 3
在函数定义语句括号内定义函数参数变量,可设置任意多个
在函数调用语句括号内将数据传递到函数定义内
在函数定义多个参数时,在函数调用时需要传递多个数据,数据之间使用逗号分隔,数据按照索引位置依次对应传递给函数定义的参数中
函数调用
关键字参数
def add(a,b,c):
print(a,b,c)
>>> add(1,c=2,b=3)
在函数调用时使用参数名赋值方式,为参数指定对应的数据
标准调用和关键字参数调用可混用,标准参数在前,关键字参数在后
默认参数
def add(a,b,c=1):
print(a+b)
>>> add(1,2)
在定义函数时可以为参数设置默认值,在调用时未设置对应数据时,则使用默认值
默认参数必须置于函数参数最后
标准参数–关键字参数–默认参数
可变参数
可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
列表可变参数
def test(a,b,*args):
print('a=',a,'b=',b,'args=',args)
>>> test(1,2)
a= 1 b= 2 args= ()
>>> test(2,3,4,5,6)
a= 2 b= 3 args= (4, 5, 6)
有上面的实例可以得知,列表可变参数中,列表可变参数返回的是包含多个参数的元组
关键字可变参数
def test(a,b,**kargs):
print('a=',a,'b=',b,'kargs=',kargs)
>>> test(2,3,c=4,d=5)
a= 2 b= 3 kargs= {'c': 4, 'd': 5}
有上面的实例可以得知,关键字可变参数中,关键字参数返回的是包含多个key,value的字典
混用
def test(a,b,*args,**kargs):
print('a=',a,'b=',b,'args=',args,'kargs=',kargs)
>>> test(2,3,111,666,888,c=4,d=5)
a= 2 b= 3 args= (111, 666, 888) kargs= {'c': 4, 'd': 5}
混用时,列表可变参数在前,关键字参数在后
列表参数和关键字可变参数之间可定义多个变量(Python2.7不支持)
忽略返回值
>>> nums = [1,2,3,4,5,6]
>>> a,*b,c= nums
>>> print(a,c)
1 6
>>> print(b)
[2, 3, 4, 5]
函数也是变量
可以将函数赋值给某个变量,此变量和函数名称一样
函数名称可以传递给其它函数
实例:
def add(a,b):
return a + b
>>> add(1,2)
3
>>> add2 = add
>>> add2(2,3)
5
还可以将函数直接当成参数传递给另一个函数
实例:
def result(a,b,func):
print('a=',a,'b=',b,'result=',func(a,b))
def add(a,b):
return a+b
>>> result(1,2,add)
a= 1 b= 2 result= 3
函数作用域
在函数中变量的查找顺序为LGB原则
L local 函数体和参数内 (p_a, p_b, l_a)
G global 模块内 (g_a, g_b)
B buildints python内置
传值与传址
对于基本类型在函数传递时,直接传递值,在函数内修改值不影响函数体外的值
对引用类型在函数传递时,传递数据的地址,在函数内修改地址内的数据会影响函数体外(重新赋值后,则为在函数体内重新定义,与函数外变量指向已不同,不会影响函数体外)
匿名函数&sorted&list.sort
lambda匿名函数
不需要定义函数名称(临时函数)
只做简单运算,并返回值,没有复杂的函数体
Python里的Lambda就是个匿名函数。典型的应用场景是结合sorted,filter,map,reduce等函数,通过闭包的特性,读取函数内部的某个变量,然后做相应简单的处理。
例:
lambda x: x * x
等价于:
def f(x):
return x * x
实例:
def result(a,b,func):
print('a=',a,'b=',b,'result=',func(a,b))
>>> result(1,2,lambda a,b:a+b)
a= 1 b= 2 result= 3
sorted()函数和list.sort()函数:
相同点:
都可以为list进行排序
参数相同,通过key指定排序的元素,使用reverse指定升序或者降序
区别:
sorted返回一个新的list不影响原list,list.sort在原list上进行排序
实例:
nums = [2,1,4,3,6,7,5]
print(sorted(nums))
print(nums)
根据第二项排序
实例:
nums = [(4,1),(2,2),(5,4),(1,3),(3,5)]
print(sorted(nums,key=lambda nums:nums[1]))
结果:
[(4, 1), (2, 2), (1, 3), (5, 4), (3, 5)]