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)
原文地址:https://www.cnblogs.com/yangjian319/p/8847276.html