zoukankan      html  css  js  c++  java
  • 函数参数、作用域、高阶函数、递归函数、高阶函数


    #-----必须参数、关键字参数、默认参数-----
     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
  • 相关阅读:
    Traits——信息输入界面
    Traits——安装/第一个界面
    opencv——如何安装opencv—python
    python——如何将列表中的元素全部取出来变成列表
    Pandas——循环路径下的文件将所有的txt文件进行合并
    股票交易
    良知?
    同源策略
    同步 异步 阻塞 非阻塞
    线程安全
  • 原文地址:https://www.cnblogs.com/rise-home/p/11592834.html
Copyright © 2011-2022 走看看