计算机应用文摘,劲爆,永泰千江月休闲农场
1 定义函数的语法: 2 3 4 def 函数名(参数): 5 函数体 6 返回值
1 # 示例 2 3 def print_hello(): 4 """ 5 打印hello 6 :return: 7 """ 8 print("hello")
定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它
调用函数很简单的,通过 函数名() 即可完成调用
1 # 示例: 2 print_hello() # 调用函数
注意:
在函数中添加返回值,需要使用return关键字
1 def fun1(): # 无返回值 2 print("aa") 3 4 def fun2(): 5 msg = "hello world" 6 return msg # 返回msg,一个返回值 7 8 def fun3(): 9 return 1, 2, 3 # 返回多个返回值 10 11 aa = fun1() # 接收函数的返回值 12 bb = fun2() 13 cc = fun3() 14 print(aa) 15 print(bb) 16 print(cc) 17 18 # 输出结果: 19 # none 20 # hello world 21 # (1, 2, 3)
总结:
1 def fun1(name): # name为形式参数 2 print(name) 3 4 aa = "hello" 5 fun1(aa) # aa为实参
1 def func(name, age=18): 2 print("%s:%s" % (name, age)) 3 4 5 # 指定参数 6 func('aa', 19) # 自定义传入默认参数,以传入的为准 7 func('cc', age=20) 8 func('bb') # 默认参数不传,使用默认值 9 10 # 运行结果: 11 # aa:19 12 # cc:20 13 # bb:18
位置参数 > *动态参数 > 默认参数
1 def func1(*args): 2 print(args) 3 print(type(args)) # <class 'tuple'> 元组 4 5 6 # 执行方式一 7 func1(11, 33, 4, 4454, 5) 8 9 # 执行方式二 10 li = [11, 2, 2, 3, 3, 4, 54] 11 func1(*li)
1 def func2(**kwargs): 2 print(kwargs) 3 print(type(kwargs)) # <class 'dict'> 4 5 6 # 执行方式一 7 func2(name='wupeiqi', age=18) 8 9 # 执行方式二 10 dict1 = {'name': 'fyh', "age": 18, 'gender': 'male'} 11 func2(**dict1)
注意:
1 # 万能参数 可以接收任意的参数 2 def func(*args, **kwargs): 3 pass
1 def func1(): 2 print("hello world") 3 4 5 def func2(): 6 print("aa") 7 func1() 8 print("cc") 9 10 11 func2() # 按顺序执行 先执行print("aa") --> func1() --> print("cc")
命名空间: 1.内置命名空间:python解释内部运行时的变量函数 2.全局命名空间:我们在py文件中直接声明出来的变量、函数 3.局部命名空间:在函数内部声明的变量和函数 加载顺序: 1.内置命名空间 2.全局命名空间 3.局部命名空间 取值顺序: 1.局部命名空间 2.全部命名空间 3.内置命名空间 作用域: 1.全局作用域:全局命名空间 + 内置命名空间 2.局部作用域:局部命名空间 可以通过globals()函数来查看全局作用域中的内容,也可以locals()查看当前作用域中的内容
1 # 示例 2 def fun1(): 3 name = "aa" 4 print(name)
报错的原因:试图访问局部变量而报的错
1 name = "bb" 2 def print_name(): 3 name = "aa" 4 print(name) 5 6 print_name() 7 print(name) 8 # 打印的结果为 9 # aa 10 # bb
使用global关键字:则会告诉python编译器,这个变量是全局变量而不是局部变量,这样在函数体内修改变量会影响全局了
1 name = "bb" 2 def print_name(): 3 global name 4 name = "aa" 5 print(name) 6 print_name() 7 print(name) 8 # 打印的结果: 9 # aa 10 # aa
1 def fun1(): 2 num = 1 3 4 def fun2(): 5 nonlocal num # 此处不能使用global,只能使用nonlocal 6 num += 1 7 return num 8 return fun2 9 10 11 aa = fun1() 12 print(aa())
函数名本质上就是函数的内存地址
1 def func(): 2 print('in func') 3 4 5 f = func 6 print(f) # <function func at 0x000001f18d5b2e18>
1 def f1(): 2 print('f1') 3 4 5 def f2(): 6 print('f2') 7 8 9 def f3(): 10 print('f3') 11 12 13 l = [f1, f2, f3] 14 d = {'f1': f1, 'f2': f2, 'f3': f3} 15 # 调用 16 l[0]() 17 d['f2']()
1 def func1(): 2 print("aa") 3 4 5 def func2(f2): 6 f2() 7 8 9 func2(func1) # 作为函数的参数
1 def func1(): 2 3 def func2(): 4 print("bb") 5 return func2 # 作为返回值 6 7 8 f = func1() 9 f()
语法格式:lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]
1 # 不带参数 2 my_fun = lambda : 10 + 20 3 # 带参数 4 my_add = lambda a, b: a + b 5 my_add()
1 def my_function(func): 2 3 a = 100 4 b = 200 5 # 把 cucalate_rule 当做函数来调用 6 result = func(a, b) 7 print('result:', result) 8 9 10 my_function(lambda a, b: a + b)
语法:sorted(iterable, key=none, reverse=false) iterable:可迭代对象 key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个对象传递给这个函数的参数,根据函数的运算结果进行排序
1 lst = [5, 7, 6, 12, 1, 13, 9, 18, 5] 2 # lst.sort() # sort是list里面的方法 3 # print(lst) 4 new_lst = sorted(lst, reverse=true) # 内置函数,返回给你一个新列表,新列表是被排序的 5 print(new_lst) 6 7 8 # 给列表排序,按照字符串的长度进行排序 9 lst2 = ["大阳哥", "尼古拉斯", "赵四", "刘能", "广坤", "谢大脚"] 10 11 12 def func(st): 13 return len(st) 14 15 16 new_lst = sorted(lst2, key=func) # 内部,把可迭代对象中的每一个元素传递给func 17 # new_lst = sorted(lst2, key=lambda x: len(x)) # 也可以使用匿名函数 18 print(new_lst)
filter(过滤):遍历序列中的每个元素,判断每个元素得到布尔值,如果是true则留下来,组成新的迭代器 语法:filter(function, iterable) 返回一个迭代器 function:用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回的true或者false来判断是否保留次数据 iterable:可迭代对象
1 list1 = ["1111aaa", "2222aaa", "3333aaa", "4444", "5555", "6666"] 2 list2 = filter(lambda x: x.endswith("aaa"), list1) # 有过滤的作用 3 print(list(list2)) 4 # 运行结果:['1111aaa', '2222aaa', '3333aaa']
语法:map(function, iterable) map处理序列中的每个元素,得到一个结果(迭代器),该迭代器元素个数与位置不变
1 list1 = [1, 2, 3, 4, 5] 2 list2 = map(lambda x: x+1, list1) # map的第一个参数为函数,后面的参数为可迭代对象 3 print(list(list2)) 4 # 结果:[2, 3, 4, 5, 6] 5 6 lst1 = [1, 2, 3, 4, 5] 7 lst2 = [2, 4, 6, 8, 9] 8 9 10 print(list(map(lambda x, y: x+y, lst1, lst2))) 11 # 结果:[3, 6, 9, 12, 14]
reduce 处理一个序列,把序列进行合并操作
from functools import reduce list1 = [1, 2, 3, 4, 5] aa = reduce(lambda x, y: x+y, list1) # 前一个参数的函数必须是两个参数 print(aa) # 运行结果:15
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
python求numpy中array按列非零元素的平均值案例
网友评论