python函数
函数
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
函数的关键字
def 定义函数
return 返回值
pass 什么都不做,占位符,比如现在还没有想到怎么写函数的代码,可以先放一个pass,让代码可以运行
exit(1) 直接退出程序
例如下面这些都是函数的写法:
def add1(x, y): print(x + y) def add2(x, y): return x + y def hello(): pass
函数的参数
如果在声明函数的时候声明了一个参数,在调用函数的时候也要传入一个参数:
def test1(str): print(str) test1("Hello,world")
在声明函数的时候,我们可以声明多个参数,单数传入参数的时候要按顺序传入:
def test2(name,age): print(name) print(age) # 要按声明的顺序传入参数 test2("yangjian",18) # 指定了关键字参数后,可以不按顺序传入参数 test2(age=18,name="yangjian")
在声明函数的时候可以指定传入参数的默认值:
def test3(name,age=18): print(name) print(age) test3(name="yangjian")
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。
*args tuple参数,对应赋值,传入的所有未命名的参数都会存放到*args,它是一个元组
**kwargs dict参数,对应赋值,传入的未命名的参数都会存到**kwargs,它是一个字典
fun(*args, **kwargs) fun(1, 2, 3, 4, 5, a=10, b=40) args = (1, 2, 3, 4, 5) kwargs = dict(a=10, b=40)
匿名函数
所谓匿名函数就是我们不再使用形如def的格式去定义函数,而是用lambda来创建匿名函数。
lambda语法格式:lambda [arg1 [,arg2,.....argn]]:expression
def add(x, y): return x + y add = lambda x,y:x+y
高阶函数
对于高阶函数,我们用得比较多的是sorted(),对所有可迭代对象进行排序操作。
m = dict(a=1,c=10,b=20,d=15) for i in m.items(): # i 是一个元组 print(i) print(sorted(m.items(),key=lambda x:x[0])) # x[0]表示按key进行排序,x[1]表示按value进行排序
# 排序后结果
# [('a', 1), ('b', 20), ('c', 10), ('d', 15)]
列表生成式
[exp for val in collection if condition]
print([x for x in range(1,5) if x%2 == 0]) # 打印1-5中的偶数 # [2, 4]
列表生成器
方法一:
(exp for val in collection if condition)
方法二:
def test(): for i in range(1,5): yield i m = test() # 返回的是一个生成器,需要使用for循环才能打印出结果 print(m) for j in m: print(j) # 返回结果如下: <generator object test at 0x00000000021CDA40> 1 2 3 4
练习
将/etc/passwd文件里面的额内容安装uid进行排序
import codecs def test(item): pass result = "" with codecs.open("passwd", "r") as f: result = sorted(f.readlines(), key=lambda item: int(item.split(":")[2])) # 读取每一行的内容,按:分隔,取第二段即uid,用sorted()进行排序 with codecs.open("sortPasswd", "w") as f: f.writelines(result)