函数的进阶

一.  函数的动态传参

1 chi(*food):
2     print(food)
3 chi('盖浇饭','拉州拉面','牛肉丸子面','清汤小面')
4 chi('红烧牛肉面','镇江锅盖面','山西刀削面')
5 chi('陕西裤带面','新疆拉条子')
6 chi('广东竹升面')
7 chi()

结果为:
(盖浇饭', '拉州拉面', '牛肉丸子面', '清汤小面')
('红烧牛肉面', '镇江锅盖面', '山西刀削面')
('陕西裤带面', '新疆拉条子')
('广东竹升面',)
()
1 def chi(**food):
2     print(food)
3 chi(主食='馒头',副食='臭豆腐',汤='紫菜蛋花汤',水果="桃子",food='牛肉')

结果:
{'主食': '馒头', '副食': '臭豆腐', '汤': '紫菜蛋花汤', '水果': '桃子', 'food': '牛肉'}

def fun(*args,**kwargs)

      print(args,kwargs)

fun(*args,**kwargs)

此函数的传参全部概括

另一种动态传参的方式:

1 def chi(*food):
2     print(food)
3 lst=['煎饼果子','肉夹馍','烤冷面','手抓饼','鸡蛋灌饼']
4 chi(*lst)
5 
6 def chi(**food):
7     print(food)
8 dic={'good_food':'大米饭','no_good_food':'猪肉炖粉条','soup':'排骨汤'}
9 chi(**dic)

函数的注释:

1 def fun(a,b):
2     """
3     这里是函数的注释,先写当前这个函数是干什么的 
4     :param a:参数a是什么意思
5     :param b:参数b是什么意思
6     :return:返回的是什么东西
7     """
8 fun(a,b)

二, 命名空间

全局名称空间

局部名称空间

内部名称空间

作用域:

1全局作用域:内置+全局

2.局部作用域:局部(函数被调用)

globals()查看全家用中的内容

locals()查看当前作用域中的内容

 a = 110 # 全局
 def fn(): #
     b = 20 # 局部
     def gn(): # 局部
         print(globals())  # 可以查看全局作用域中的内容
         print(locals())  # 查看当前作用域中的内容
     gn()
 fn()

 

 三. 函数嵌套

函数可以互相嵌套

 1  def outer():
 2      print("哈哈")
 3      def inner_1():
 4          print("呵呵")
 5          def inner_1_1():
 6              print("嘻嘻")
 7          inner_1_1()
 8          print("吼吼")
 9      def inner_2():
10          print("嘿嘿")
11      inner_2()
12      inner_1()
13  outer()

四. global和nonlocal关键字

global:在局部访问全局的内容

1  a = 10 # 全局变量本身就是不安全的, 不能随意修改, 闭包
2  def func():
3      global a  # 1. 可以把全局中的内容引入到函数内部 , 2. 在全局创建一个变量
4      # a = 20
5      a += 10 # a = a+10
6      print(a)

nonlocal:在局部寻找外层函数中离他最近的那个变量

 1  func()
 2  print(a)
 3  a = 10
 4  def outer():
 5 
 6      def inner(): # 在inner中改变a的值
 7          nonlocal a # 寻找外层函数中离他最近的那个变量
 8          a = 20
 9      inner()
10 
11  outer()

 

posted @ 2018-08-09 16:18  Ryan_Liu_lgl  阅读(106)  评论(0编辑  收藏  举报