zoukankan      html  css  js  c++  java
  • 函数

    参数

    • 形参 、实参、默认参数、关键参数
    def a(x,y,z='默认参数',*args)
    	...
    	return x,y
    a(2,z=1,y=3)  # 这里的z=和y=为关键参数
    
    • 非固定参数:
      方式一:如果参数中出现*号,传递的参数就可以不再是固定参数,传过来的所有参数打包为元组
    def register(name,age,*args):
      	print(name,age,args)
    register('q1ang')
    register('q1ang',22)
    register('q1ang',22,'CN')
    register('q1ang',22,'CN','xxx')
    

    方式二:当希望传递的参数为['q1ang',22,'CN','xxx']

    register('q1ang',*['q1ang',22,'CN','xxx'])  # 这样的传递效果和*args一样
    

    方式三:参数中出现**号,接收未定义的关键字参数传过来的所有参数打包为字典

    def register(name,age,*args,**kwargs):  
    	print(name,age,args,kwargs)
    
    register('q1ang',22,)
    >>>q1ang 22 () {}
    
    register('q1ang',22,'china','boy')
    >>>q1ang 22 ('china', 'boy') {}
    
    register('q1ang',22,'china','boy',province='Ningxia')
    >>>q1ang 22 ('china', 'boy') {'province': 'Ningxia'}
    

    返回值

    要想获取函数的执行结果,就可以用return语句把结果返回

    局部变量、全局变量

    在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量

    当全局变量与局部变量同名时:

    在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用

    name = 'q1ang'
    def change_name(name):
        print("before change:", name)
        name = 'Q1ANG'
        print("after change", name)
        
    change_name(name)
    print(name)
    
    before change: q1ang
    after change Q1ANG
    q1ang
    

    如果需要在函数内修改全局变量:

    global name 
    name = 'xxx'  # 修改需要在定义全局变量下边,不建议在函数内修改全局变量
    

    在函数里修改列表数据:

    names = ['q1ang',22]
    def change_name():
        names = ['Q1ANG',22]  # 这样不能修改,这里相当于修改了列表的内存地址
        names[0] = 'Q1ANG'
    change_name()
    print(names)
    
    >>> ['Q1ANG',22]
    

    嵌套函数

    def func1():
        print('func1')
        def func2():
            print('func2')
    

    作用域

    函数就是一个作用域,局部变量其实是放在其作用域中

    age = 18
    def func1():
        age = 73
        print('q1ang')
        def func2():
            age = 26
            pring('Q1ANG')
    

    匿名函数

    节省代码量、外观简洁

    def calc(x,y):
        return x*y
    lambda x,y:x*y  # 声明一个匿名函数
    lambda x,y:x*y if x < y else x/y
    func = lambda x,y:x*y
    print(func(2,6))
    

    高阶函数

    变量可以指定一个函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

    def func(x):
        print(x)
    def func1():
        return 2
    def func2():  # return 另一个函数
        return func1
    func(func1())
    func2()
    

    递归函数

    在函数执行的过程中调用自己。

    特点

    1. 必须有一个明确的结束条件,要不就会变成死循环了,最终撑爆系统
    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    3. 递归执行效率不高,递归层次过多会导致栈溢出

    应用

    阶乘
    def func(n):
        if n == 1:
            return 1
        return n * func(n-1)
    
    print(func(10))
    
    二分法

    尾递归

    def func(n):
        return func(n+1)
    
  • 相关阅读:
    winform 中xml简单的创建和读取
    睡眠和唤醒 进程管理
    [山东省选2011]mindist
    关于zkw流的一些感触
    [noip2011模拟赛]区间问题
    [某ACM比赛]bruteforce
    01、Android进阶Handler原理解析
    02、Java模式UML时序图
    04、Java模式 单例模式
    14、Flutter混合开发
  • 原文地址:https://www.cnblogs.com/q1ang/p/9404607.html
Copyright © 2011-2022 走看看