python基础总结3——函数
代码请参考我的github:
https://github.com/masterzz/python-learn
一、函数
1,函数的格式
python的函数定义是很简单的,如下即可:
def 函数名(参数):
函数代码(函数要执行的代码)
而调用函数,各个语言大同小异: 函数名(参数)
如果要给函数加入文档说明:
def add(a,b):
“传入两个参数,返回相加值”
return a+b;
print(add(3,2))
这时会有文档说明:
help(add)
Help on function add in module __main__:
add(a, b)
传入两个参数,返回相加值
2,全局变量和局部变量
函数内的变量就是局部变量咯,和java中一样。
当时对于python 而言它的全局变量就像java中的static的变量一样,可以在函数中直接调用:
num=100
def printNum():
print(num)
printNum()
结果:
100
但是如果直接在函数中改全局变量会报错:
UnboundLocalError: local variable ‘num’ referenced before assignment
那为什么还要定义全局变量,改都改不了!加上global就可以修改了(这保证了数据的安全性):
num=100
def printNum():
global num
print(num)
num+=2
printNum()
print(num)
运行结果:
100
102
3,python返回多个变量
python中还有一个特性比较有意思,就是可以返回多个变量,但是呢这个多个变量其实也不算多个变量,其实呢就是将这些变量封装成一个元组:
def test1(a,b):
print(a)
print(b)
return a,b
print(test1(b=11,a=22))
输出结果:
22
11
(22, 11)
4,缺省参数
def printinfo( name, age = 35 ):
# 打印任何传⼊的字符串
print “Name: “, name
print “Age “, age
printinfo(‘zhangsan’)
简单说就是不传age时,它会默认age=35;但是这个缺省的参数要写到最后
运行结果:
Name: zhangsan
Age 35
当有多个缺省参数时,这种写法就会有用了:
printinfo(‘zhangsan’,age=22)
可以跳过没有的缺省参数
当做函数的写法来看,python要比java灵活,这里会省事一些。当然java也做了一系列优化,像装包、解包,以及函数式编程,但是灵活性上还是弱于动态语言。
5,不定长参数
python还有一个很有意思的东东,那就是不定长参数,先来take a look:
def fun(a,b,*args, **kwargs):
print(‘a= ‘ , a)
print(‘b= ‘ , b)
print(‘args= ‘ , args)
print(‘kwargs= ‘ , kwargs)
如上是定义,下面来看参数部分:
fun(22,33,44,55,66)
这样的输出结果:
a= 22
b= 33
args= (44, 55, 66)
kwargs= {}
换一个参数列表:
fun(22,33,44,55,d=22)
运行结果:
a= 22
b= 33
args= (44, 55)
kwargs= {‘d’: 22}
所以上面的*args, **kwargs分表表示将不定长的数值或者字典分别放到这两个参数中来咯。
下面来看一个有意思的参数列表:
A=[3,4,5,6]
B={‘c’:’cc’,’d’:’dd’}
fun(22,33,44,55,*A,**B)
这时会输出什么呢?没错,A和B的内容都会放到args中!
a= 22
b= 33
args= (44, 55, [3, 4, 5, 6], {‘c’: ‘cc’, ‘d’: ‘dd’})
kwargs= {}
这里我们进行一个处理:
fun(22,33,44,55,*A,**B)
a= 22
b= 33
args= (44, 55, 3, 4, 5, 6)
kwargs= {‘c’: ‘cc’, ‘d’: ‘dd’}
是不是很熟悉?没错,这就是解包,在js中喜欢用[..]来接收解包的参数,java印象中也有这个功能。python中也很有意思,*能够解列表之类的包,**解的是字典的包,如果用*解字典的包,可以试试,智能取到key。另外再说明一点,函数中的args和kwargs名字是可以改的!
7,匿名函数
说到匿名函数,这个东东,真的是在哪个语言里都是很好用的,java中写多线程,Python的函数式编程,以及js的回调函数,都是匿名函数。
所谓匿名函数就是没有名字的函数咯,python贼实诚,用了lambda关键词来创建匿名函数。
基本格式:
lambda [arg1 [,arg2,…..argn]]:expression
实例:
sum = lambda arg1, arg2: arg1 + arg2
sum = lambda arg1, arg2: arg1 + arg2
sum(1,2)
3
这样就可以了,是不是很方便?
有个地方很有意思,java中的函数式编程的接口就叫lambda,这个lambda是希腊字母的第 11个字,是不是很熟悉,印象中有一个lambda的算式。
实际上lambda适合比较简单的函数,尤其是那种一层一层的嵌套调用,贼好用。
来一个例子:
def test(x,y,aaa):
return aaa(x,y);
test(22,33,lambda x,y : x+y)
55
这种办法就是把lambda表达式当作参数来传递。还有就是给字典排序,可以用到:
stus.sort(key = lambda x:x[‘name’])
倒序:
stus.sort(key = lambda x:x[‘name’], reverse=True)
还没有评论,来说两句吧...