• Python函数


    1.创建函数

    以'def'关键字开始,后边是函数名称,圆括号内是参数,后跟冒号,return返回,不写ruturn返回 None。

    def Greet(name):
        print("Hello "+name)
    
    Greet("Python")
    
    输出:
    Hello Python

    1.1 一些重要的函数属性

    def Greet(name):
        "Greet说明:文档化函数"
        print("Hello "+name+"
    ")
    
    Greet("Python")
    
    
    print(Greet.__doc__)#返回函数的文档字符串
    print(Greet.__name__)#返回函数名字
    print(Greet.__module__)#返回函数定义所在模块的名字
    
    输出:
    Hello Python
    Greet说明:文档化函数
    Greet
    __main__

    1.2 参数

    1.2.1 关键字参数和默认值
    #使用关键字参数可以忽略参数顺序
    #位置参数可以和关键字参数联合使用,但是位置参数必须放在关键字参数前面。
    def hello(gretting,name,pun="!"):
        print("%s ,%s%s" % (gretting,name,pun))
    hello("Hello","Bob")
    hello(name = "world",gretting = "Hello")#关键字
    hello("Hello","Bob",pun=".")
    
    输出:
    Hello ,Bob!
    Hello ,world!
    Hello ,Bob.
    1.2.2 收集参数
    def func3(title,*params):
        print(title)
        print(params)
    func3("title","Testing","Testing2","Testing3")
    
    输出:
    title
    ('Testing', 'Testing2', 'Testing3')
    
    #可以看到参数前的星号将所有值放在同一个元组中,星号的意思就是收集其余位置的参数,如果不提供,就是个空元组。
    
    # "**"处理关键字参数 返回字典
    def print_params(**params):
        print(params)
    
    print_params(x=1,y=2,z=3)
    
    输出:
    {'x': 1, 'z': 3, 'y': 2}
    
    联合使用示例:
    # "**"处理关键字参数
    def print_params(param1,param2,param3=7,*params4,**params5):
        print(param1,param2,param3)
        print(params4)
        print(params5)
    
    print_params("pa1","pa2","pa3","pa4","pa5","pa6",name="Bob",age=18,sex="")
    
    输出:
    pa1 pa2 pa3
    ('pa4', 'pa5', 'pa6')
    {'sex': '', 'name': 'Bob', 'age': 18}
    1.2.3 收集参数的逆过程
    def add(x,y):
        return x+y
    
    params=(1,2)
    
    print(add(*params))
    
    输出
    3
    
    def printUserInfo(**params):
        print(params)
    
    params2 = {"name":"bob","age":20,"sex":""}
    printUserInfo(**params2)
    
    输出:
    {'sex': '', 'name': 'bob', 'age': 20}

    2.作用域

    x=1#全局变量
    def func():#每个函数调用都会创建一个新的作用域
        x=3
    
    func()#不会影响全局变量,全局变量名做参数名也没有问题
    print(x)
    
    输出:
    1
    如果局部变量或者参数的名字和想要访问的全局变量名相同,全局变量会被局部变量屏蔽,如果需要访问使用globals()["变量名"]获取
    par = "thon"
    def combie(par):
        print(par+globals()["par"])
    
    combie("py")
    
    输出:
    python

    重绑定全局变量

    x=1
    def change():
        global x
        x=x+1
    change()
    print(x)
    
    输出:
    2

    3.其他

    嵌套作用域,Python的函数是可以嵌套的

    def foo():
        def bar():
            print("Hello")
        bar()

    闭包

    #闭包包含自由(未绑定到特定对象)变量;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。(引用百度百科)
    
    def foo(fac):
        def bar(num):
            return num*fac
        return bar
    
    double = foo(2)
    print(double(3))
    
    tri = foo(5)
    print(tri(6))
    
    print(foo(7)(8))
    
    输出:
    6
    30
    56

    递归

    #阶乘
    def factorial(n):
        if n == 1:
            return 1
        else:
            return n * factorial(n-1)
    
    print(factorial(5))
    
    输出:
    120
    
    #
    def power(x,n):
        if n == 0:
            return 1
        else:
            return x * power(x,n-1)
    
    print(power(2,3))
    
    输出:
    8

    lambda表达式(匿名函数)

    #Python对匿名函数的支持有限,只有一些简单的情况下可以使用匿名函数。
    
    sum = lambda  x, y : x + y
    
    """
    相当于:
    def f(x,y):
        return x + y
    """
    
    print(sum(2, 3))
    输出
    5
     
     
     
     
     
    c
  • 相关阅读:
    04_web基础(六)之请求转发与重定向
    04_web基础(五)之cookie与session
    04_web基础(四)之servlet详解
    04_web基础(三)之进一步理解web
    04_web基础(二)之web构建
    本地密码提取工具-LAZAGNE
    免杀工具汇总
    流量取证-提取文件
    CA证书安装以及sslh协议转发
    ssh 端口转发
  • 原文地址:https://www.cnblogs.com/Tabby/p/7497028.html
Copyright © 2020-2023  润新知