zoukankan      html  css  js  c++  java
  • 函数与作用域

    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会报错原因是不能先执行后打印。这也说明的解释器将函数先储存进了内存。

  • 相关阅读:
    [唐诗]禅-虞世南
    监考
    弄了一个数学论坛,感觉不错,欢迎加入讨论
    中国科学院大学2016年高等代数考研试题
    中国科学院大学2016年数学分析考研试题
    北京大学2016年高等代数与解析几何考研试题
    北京大学2016年数学分析考研试题
    pedagogical
    2012年度江西省科学技术奖授奖项目名单
    2013年度江西省科学技术奖授奖项目名单
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/5848772.html
Copyright © 2011-2022 走看看