• 函数与作用域


    1.函数

    1.1函数一般形式

    1 def f():
    2     print("OK")
    3 f()
    4 print(f)

    函数作用:

    (1)避免码重复

    (2)可拓展性强

    (3)代码一致性

    这其中需注意:打印出来的f相当于是一个变量的地址;只有()才会执行函数;函数有着自己的作用域;函数会预先储存进内存,但是执行还是一行一行来。

    1.2形参和实参

    1 def num(a,b): 2 print("gaga is %s %s"%a,b)

    上述代码中的a,b就是形参。通过形参就可以将外来的数据带入到函数中执行。

    在运行函数的时候num(1,2)其中1和2就是实参。实参是根据自己需要输入进去的。

    注意:不单单是数字输入其他的如:变量,函数等。

    1.3返回值

    1 def f(n):                       
    2     return n*n
    3 def foo(a,b,func):
    4     return func(a)+func(b)
    5 print(foo(1,2,f))

    返回关键字return后面的内容就是该函数的返回值。返回值的作用是结束函数并且返回一个值。

    从上述的代码中可以看出:

    (1)返回多个值 return会将其做成一个元组

    (2)以函数为实参时注意括号有无很重要

    1.4 四种方式

    函数  >>>  执行

    1.def f(a,b)  >>> f(1,2)         # 必须一一对应  

    2.def f(sex="female")             # 有默认的效果

    3.def f(*args) >>> f (1,2,i,j)  # 必须是无命名,也可以元组的形式添加。但是*[1,2,4]这样实参会是一个元组

    4.def f(**kwargs) >>> f("name"="a","lk"=23) # 道理同上,但都是键值对。

    四种之间的顺序是:1234 其中有些细节应以试验效果为准。没出现歧义为准。

    2.作用域

     int (a)
    1
    a =1 2 def f(): 3 a =2 4 b =9 5 print(a) # 2 6 def l(): 7 # nonlocal b 8 b = 3 9 def p(): 10 nonlocal b 11 b=4 12 print(b) # 4 13 a =4 14 p() 15 print(b) # 4 16 l() 17 print(b) # 9 18 f()

    此处进行了3次函数的嵌套,共4层,且将最里面一层看成第四层。

    作用域的思考搜寻范围一次为:legb即

    "build in"    >>>   int
    "global" >>> a = 1
    "enclosing" >>> a = 2 b = 3
    "local" >>> b = 4 a = 4

    总结:

    (1)从里往外找。在最里层print(b)中解释器会先在本层找b,本层没有就找到外层的b=3。
    (2)里层需要用外层的变量。"若local和enclosing中想修改enclosing中的即内部层修改其上一层(不包括global)的用nonlocal 并且只能修改上一层上上层没影响"例子是注释中的b=9
    (3)"变量在没声明的情况下不能修改上一层的,即使变量名字一样也是指在本层中使用(不是同一个变量)"

    (4)第四层中若是没声明nonenclosing b 则打印b会报错原因是不能先执行后打印。这也说明的解释器将函数先储存进了内存。

  • 相关阅读:
    利用哈希map快速判断两个数组的交集
    TCP协议中的三次握手和四次挥手(图解)-转
    PC,移动端H5实现实现小球加入购物车效果
    HQL和SQL的区别
    Java泛型详解,通俗易懂只需5分钟
    经典的 Fork 炸弹解析
    Java并发之AQS详解
    Java不可重入锁和可重入锁的简单理解
    Codeforces 1215F. Radio Stations
    Codeforces 1215E. Marbles
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5848772.html
Copyright © 2020-2023  润新知