欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

函数参数、作用域、高阶函数、递归函数、高阶函数

程序员文章站 2022-07-17 07:49:39
# 必须参数、关键字参数、默认参数 1 def user_info(name,age,sex="male"): 2 print("Nmae: %s"% name) 3 print("Age: %d" % age) 4 print("Sex:%s" % sex) 5 6 #必须参数('dream',1 ......

#-----必须参数、关键字参数、默认参数-----
 1 def user_info(name,age,sex="male"):
 2     print("nmae: %s"% name)
 3     print("age: %d" % age)
 4     print("sex:%s" % sex)
 5 
 6 #必须参数('dream',18)
 7 user_info('dream',18) #nmae: dream age: 18 sex:male
 8 #关键字参数(age=10,name='rise')
 9 user_info(age=10,name='rise') #nmae: rise age: 10 sex:male
10 #默认参数(sex="male")
11 user_info("xiaohong",12,"madam") #nmae: xiaohong age: 12 sex:madam

#-----sum() 方法对系列进行求和计算-----

语法 sum(iterable[, start])
参数
1、iterable -- 可迭代对象,如:列表、元组、集合。
2、start -- 指定相加的参数,如果没有设置这个值,默认为0。

#-----不定长参数使用(*args,**kwargs)-----
#-----加法器

 1 def add(*args):
 2     print(args,type(args)) #((1, 2, 3, 4, 5) <class 'tuple'> #args是可迭代对象(元组)
 3     sum1 = sum(args)
 4     print(sum1)
 5 add(1,2,3,4,5)
 6 
 7 def print_info(name,age,**kwargs):
 8     print("nmae: %s"% name)
 9     print("age: %d" % age)
10     for i in kwargs:
11         print("%s:%s"% (i,kwargs[i]))
12 
13 print_info("xiaohong",12,sex="madam",job="it")
14 
15 #结论:关于不定长参数位置:*args放在左边,**kargs 参数放在右边
16 
17 def print_info(name,age,sex = "male",*args,**kwargs):
18     print("nmae: %s"% name)
19     print("age: %d" % age)
20     print("sex:%s" % sex)
21     for i in args:
22         print(i)
23     for j in kwargs:
24         print("%s:%s"% (j,kwargs[j]))
25 
26 print_info("xiaohong",12,"madam",1,2,job="it",learn="python")

#-----return-----

return作用
1、结束函数
2、返回某个对象

#-----注意问题:
1、函数里如果没有return,会默认返回一个none
2、如果return 多个对象,那么python会帮我们多个对象封装为成一个元组(返回一个对象)

1 def f():
2     return 1
3 print(f()) #return 返回1(return返回给调用者)
4 
5 def add(*args):
6     print(args,type(args)) #((1, 2, 3, 4, 5) <class 'tuple'> #args是可迭代对象(元组)
7     return sum(args)
8 print(add(1,2,3,4,5))

#-----作用域
#作用域:

1、l: local,局部作用域,即函数中定义的变量
2、e: enclosing,嵌套父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局作用域。
3、g: globa 全局变量,模块级别定义的变量。
4、b: built-in 系统固定模块里面的变量

作用域优先级:局部作用域>外部作用域>当前模块中的全局作用域>python内置作用域

 1 count = 10
 2 def outer():
 3 
 4     # print(count) #local variable 'count' referenced before assignment
 5     global count   #全局变量使用global 关键字
 6     print(count) #10
 7     count = 5
 8     print(count) #5
 9 outer()
10 
11 def outer():
12     count = 10
13     def inner():
14         nonlocal count  #嵌套作用域变量使用nonlocal 关键字
15         print(count) #10
16         count = 20
17         print(count) #20
18     inner()
19 outer()

#-----高阶函数-----
#1、函数名可以进行赋值
#2、函数名可以作为参数,函数名还可以做为函数的返回值
 1 def f(n):
 2     return n*n
 3 def foo(a,b,f):
 4     return f(a)+f(b)
 5 print(foo(2,3,f)) #13
 6 
 7 def a():
 8     def b():
 9         return 6
10     return b
11 ret = a()
12 print(ret()) # 6

#-----递归函数-----
#定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身(本身),这个函数就是递归。
#-----阶乘实例
 1 def num1(n):
 2     ret = 1
 3     for i in range(1,n+1):
 4         ret = ret * i
 5     return ret
 6 print(num1(4))
 7 
 8 def num2(n):
 9     if n ==  1:
10         return 1
11     return n*num2(n-1)
12 print(num2(4))

#-----斐波那契数列1 1 2 3 5 8 13
 1 def fibo(n):
 2     if n <= 1:
 3         return n
 4     return fibo(n-1)+fibo(n-2)
 5 
 6 print(fibo(8))
 7 
 8 def fi(n):
 9     before = 0
10     after = 1
11     for i in range(n-1):
12         before,after = after,before+after
13     return after
14 print(fi(6))

#-----内置函数-----

#-----filter过滤器
1 str = ['a','b','c']
2 def fun1(s):
3     if s != 'a':
4         return s
5 
6 ret = filter(fun1,str)  #filter迭代器对象
7 print(list(ret)) #['b', 'c']

#-----map处理序列(拼接、修剪、删除)
1 str = ['a','b','c']
2 def fun1(s):
3     if s != 'a':
4         return s+'alvin'
5 ret = map(fun1,str) # 迭代器对象
6 print(list(ret)) #[none, 'balvin', 'calvin']

#-----reduce的结果就是一个值
1 from functools import reduce
2 def add1(x,y):
3     return x + y
4 
5 print(reduce(add1,range(1,101)))  #36  (1+2+3+4+5....+8+9)

#-----lambda匿名函数
1 add = lambda a,b : a+b
2 print(add(2,3)) #5