• python3.x 基础三:函数


    1.OOP 面向对象编程,万物皆对象,以class为主,抽象化

    2.POP 面向过程变成,万事皆过程,def定义过程

    3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫function/方法/过程/子程序

    函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可 --Alex

    特性:

    1. 减少重复代码
    2. 使程序变得可扩展
    3. 使程序变得易维护

    语法定义:

    def 函数名():
        函数执行语句
    • 不带参数的函数调用
    >>> def func_name1():
    ...     print("hello world")
    ... 
    >>> func_name1()
    hello world
    • 带1个参数的函数调用
    >>> def func_name1(name):
    ...     print("my name is :",name)
    ... 
    >>> func_name1('alex')
    my name is : alex
    >>> name = 'oldboy'
    >>> func_name1(name)
    my name is : oldboy
    >>> 
    • 带2个参数的函数调用
    • def定义函数的时候,括号里面的变量叫形参,引用内存空间
    • 调用函数的时候,括号里面的变量叫实参,内存数据
    • 形如(variable1,variable2),叫位置参数
    • 形如(variable1=value1,variable2=value2),叫关键字参数
    • 关键字参数一定要在位置参数后面
    • 没特别指明,形参和实参必须一一对应,多一个少一个都报错
    >>> def func_name2(a,b):
    ...     c=a*b
    ...     print(c)
    ... 
    >>> func_name2(2,3)
    6
    >>> x,y=5,5
    >>> func_name2(x,y)
    25
    >>> func_name2(a=2,b=3)
    6
    >>> func_name2(a=2,5)
      File "<stdin>", line 1
    SyntaxError: positional argument follows keyword argument
    >>> func_name2(2,b=5)
    10
    >>> func_name2(a=2,b=3,c=4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func_name2() got an unexpected keyword argument 'c'
    >>> func_name2(a=2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func_name2() missing 1 required positional argument: 'b'
    • 函数返回值,遇到return语句将结束函数
    >>> def with_return(a,b):
    ...     return(a * b)
    ...     return(a + b)
    ... 
    >>> def without_return(a,b):
    ...     print(a*b)
    ...     print(a+b)
    ... 
    >>> with_return(2,3)
    6
    >>> without_return(2,3)
    6
    5
    >>> x=with_return(2,3)
    >>> print(x)
    6
    >>> y= without_return(2,3)
    6
    5
    >>> print(y)
    None
    >>> 
    • 全局变量与局部变量
      •   函数体外定义的变量称为全局变量,在函数体内也生效,前提是先定义全局变量,后定义函数
      •   函数体内定义的变量称为局部变量,只在当前函数体内生效
    name,age = 'alex',18
    print(name,age)
    def func_name0():
        name = 'oldboy'
        age = 100
        print(name,age)
        print(age+1)
    func_name0()
    print(name,age)
    
    alex 18
    oldboy 100
    101
    alex 18
    • 非固定参数,当传入的参数不确定个数的时候
      • 非固定参数*args,传入的参数变成元组,元组可为空
      • 非固定参数**kwargs,传入的参数变成字典,
      • *args与**kwargs可同时使用
    >>> def func_name5(name,age,*args):
    ...     print(name,age,args)
    ... 
    >>> func_name5('alex',18)
    alex 18 ()
    >>> func_name5('alex',18,'oldboy')
    alex 18 ('oldboy',)
    >>> func_name5('alex',18,'oldboy',100)
    alex 18 ('oldboy', 100)
    >>> func_name5('alex',18,'oldboy',100,[1,2])
    alex 18 ('oldboy', 100, [1, 2])
    >>> func_name5('alex',18,'oldboy',100,[1,2],{'key1':'v1','k2':'v2'})
    alex 18 ('oldboy', 100, [1, 2], {'key1': 'v1', 'k2': 'v2'})
    >>> def func_name6(name,age,**kwargs):
    ...     print(name,age,kwargs)
    ... 
    >>> func_name6('alex',18)
    alex 18 {}
    >>> func_name6('alex',18,'oldboy')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func_name6() takes 2 positional arguments but 3 were given
    >>> func_name6('alex',18,oldboy=100)
    alex 18 {'oldboy': 100}
    >>> func_name6('alex',18,oldboy=100,salary=1,address='beijing')
    alex 18 {'address': 'beijing', 'salary': 1, 'oldboy': 100}
    >>> def func_name7(name,age,*args,**kwargs):
    ...     print(name,age,args,kwargs)
    ... 
    >>> func_name7('yzw',28,18,'man',address='guanghzou',mail='xxx@com.cn')
    yzw 28 (18, 'man') {'address': 'guanghzou', 'mail': 'xxx@com.cn'}
    >>> func_name7('zvy',18)
    zvy 18 () {}
    • 嵌套函数,函数中调用函数,但是只能调用同级的函数,不能隔级调用
    • 递归函数
      • 必须有一个明确的结束条件
      • 每递归一次,问题规模比上一次都应有减少
      • 效率不高,下面这个越到后面效率越低
    >>> list1=[0,1]
    >>> for i in range(2,10):
    ...     list1.append(list1[i-1]+list1[i-2])
    ... 
    >>> print(list1)
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    >>> def func_fib(x):
    ...     if x == 0:
    ...             return 0
    ...     elif x == 1 or x == 2:
    ...             return 1
    ...     return func_fib(x-1)+func_fib(x-2)
    ... 
    >>> func_fib(10)
    55
    • 匿名函数--link:
    • 高阶函数,变量指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
    >>> def func_high(a,b,f):
    ...     return f(a),f(b)
    ... 
    >>> num1=10
    >>> str1='hello'
    >>> func_high(num1,str1,id)
    (10911456, 140199339463320)
  • 相关阅读:
    UE4 UnLoadStreamLevel
    UE4 Xml读写
    UE4 保存为bitmap
    C++ 不定参数(转)
    C++ 默认参数(转载)
    Tuple初探
    遗传算法matlab实现
    蚁群算法matlab实现
    汉诺塔问题C++实现
    较优H圈matlab实现
  • 原文地址:https://www.cnblogs.com/jenvid/p/7823244.html
Copyright © 2020-2023  润新知