zoukankan      html  css  js  c++  java
  • python之函数

    转自:https://www.cnblogs.com/Eva-J/articles/7156261.html

    1、函数的定义:

    1 def main():
    2     #代码

    2、函数可以返回一个值,也可以返回多个值。

         返回多个值时:如果用一个变量去接收,返回的是元祖。用多个变量接收,变量的个数要和返回值的个数相同

    3、函数参数:定义顺序为:位置参数>可变参数>默认参数>关键字参数

    例如:

    def func(a,b,*args,c=1,d=2,**kwargs):
        print(a)
        print(b)
        print(args)
        print(c)
        print(d)
        print(kwargs)
    func(1,2,'c','d',c=2,k=6,f=9,d=7)

    显示结果

    1
    2
    ('c', 'd')
    2
    7
    {'k': 6, 'f': 9}

      PIS:默认参数如果定义为可变参数,默认参数只要不重新赋值( list = [] 也算重新赋值),list指向的地址永远不变!

    def extendList(val, list=[]):
        list.append(val)
        return list
    list1 = extendList(100)
    print(list1)
    list2 = extendList(40, list=[])
    print(list2)
    list3 = extendList(200)
    print(list3)
    list4 = extendList(50, list=[])
    print(list4)

    显示结果:

    [100]
    [40]
    [100, 200]
    [50]

    4、命名空间:

    有三种空间:内置命名空间,全局命名空间,局部命名空间

     加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

    调用顺序:局部命名空间->全局命名空间->内置命名空间(不可逆)

    x = 1
    def f(y):
    global x
    print(x) print(y) f(3)

    显示如下:

    1

    3

    5、作用域

    全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

    局部作用域:局部名称空间,只能在局部范围生效

    globals和locals方法:可以在函数内声明,某个变量为全局变量

    a = 10
    def func():
        global a
        a = 20
    
    print(a)
    func()
    print(a)

    显示:10 20   如果没有global a  显示 10 10 具体看:https://www.cnblogs.com/zzq888/articles/10302702.html

    6、函数的嵌套调用

    def max2(x,y):
        m  = x if x>y else y
        return m
    
    def max4(a,b,c,d):
        res1 = max2(a,b)
        print(res1)
        res2 = max2(res1,c)
        print(res2)
        res3 = max2(res2,d)
        print(res3)
        
    max4(1,2,3,4)

    7、函数的嵌套定义

    def f1():
        print("in f1")
        def f2():
            print("in f2")
    
        f2()
    f1()

     8、函数的本质

    函数名本质上就是函数的内存地址

    8.1可以被引用

    def func():
        print('in func')
    
    f = func
    print(f)

    8.2可以被当作容器类型的元素使用(加上括号,就是运行函数)

    def f1():
        print('f1')
    
    
    def f2():
        print('f2')
    
    
    def f3():
        print('f3')
    
    l = [f1,f2,f3]
    d = {'f1':f1,'f2':f2,'f3':f3}
    #调用
    l[0]()
    d['f2']()

    8.3

    可以当作函数的参数和返回值(当成普通变量使用)

    9、闭包(内部函数对外部作用域而非全剧作用域的名字进行了引用,则该内部函数称为闭包函数):

      #1、必须要有一个内嵌函数
      #2、内嵌函数中要对外层函数中的引用(对全局变量的引用不算闭包函数)
      #3、外部函数必须返回内嵌函数的地址
    def func():
        name = 'eva'
        def inner():
            print(name)
        return inner
    
    f = func()#返回的是内部闭包函数inner的地址
    f()#地址+括号,运行闭包函数

     闭包,多层嵌套

    def wrapper():
        money = 1000
        def func():
            name = 'eva'
            def inner():
                print(name,money)
            return inner
        return func
    
    f = wrapper()
    i = f()
    i()

    以下不属于闭包(对全局变量引用了)

    #输出的__closure__为None :不是闭包函数
    name = 'egon'
    def func2():
        def inner():
            print(name)
        print(inner.__closure__)
        return inner
    
    f2 = func2()
    f2()
    
    

      

  • 相关阅读:
    php长字符串
    ObjectiveC中的一些特殊的数据类型
    Android带文字的ImageButton实现
    android Error generating final archive: Debug certificate expired on xxxxxx
    iphone
    同步与异步调用http请求 iphone开发
    php输出xml格式字符串(用的这个)
    PHP数据库调用类调用实例
    VMware 8安装苹果操作系统Mac OS X 10.7 Lion正式版
    break和continue的区别
  • 原文地址:https://www.cnblogs.com/zzq888/p/10302415.html
Copyright © 2011-2022 走看看