python学习Day10--传参

【主要内容】

1. 动态参数
位置参数的动态参数: *args
关键字参数的动态参数 : **kwargs
顺序:
位置,*args,默认值,**kwargs
在形参上*聚合, **聚合
在实参上*打散, **打散
2. 命名空间和作用域
命名空间:
1. 内置命名空间: python解释内部运行时的变量函数
2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
3. 局部命名空间: 在函数内部声明的变量和函数.
作用域:
1.全局作用域:内置+全局
2.局部作用域:局部
globals() 查看全局作用域中的名字
locals() 查看当前作用域中的名字

3. global和nonlocal
global: 把全局变量拿到局部来用.
nonlocal: 把离他最近的一层的变量拿过来.不会找全局

【代码】

1、动态传参

 1 # def chi(good_food, bad_food,drink, ice, jiu):
 2 #     print("我要吃", good_food, bad_food)
 3 #
 4 # chi("盖浇饭", "辣条")
 5 
 6 # 位置参数 > *动态参数 > 默认值参数
 7 
 8 
 9 # def chi( *food, a, b): # 可以传入任意的位置参数
10 #     print("我要吃", food)  # 动态参数接收到的是tuple类型的数据
11 #
12 # chi("盖浇饭", "辣条", "面条")
13 # def func(a, b, c, *args, d = 5):
14 #     print(a, b, c, d, args)
15 #
16 # func(1,2,3)
17 # func(1,2,3,4,5,6,7, d ="马大哈")
18 
19 # def chi(*food):
20 #     print("我要吃", food)
21 
22 # 写函数. 给函数传递任意个整数. 返回这些数的和
23 # def he(*n):
24 #     sum = 0
25 #     for e in n:
26 #         sum += e
27 #     return sum
28 # print(he(5))
29 
30 
31 # 动态接收关键字参数
32 #  *位置参数
33 # **关键字参数
34 # def func(**food):   # **food动态接收关键字参数
35 #     print(food) # 接收到的是字典
36 #
37 # func(good_food="盖浇饭", bad_food="辣条", drink="冰封")
38 
39 # 关键字参数一定在位置参数后面
40 # 位置参数 > *args > 默认值 > **kwargs
41 
42 # 这个函数可以接收所有的参数(无敌的)
43 # def func(*args, **kwargs):
44 #     print(args)
45 #     print(kwargs)
46 # func(1, 2, 5, 6, name="taibai",age=18, sex="不详")
47 
48 # 把列表中的每一个元素作为参数, 传递给函数. 一次都传过去
49 
50 # def func(*args, **kwargs):  # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
51 #     print(args)
52 #     print(kwargs)
53 #
54 #
55 # # lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
56 # # func(*lst)  # 实参, 打散, 迭代产生的
57 #
58 # dic = {"name":"太白", "alex":"wuse"}
59 # func(**dic) # 把字典打散. 以key=value形式进行传参
60 
61 
62 # def func(a, b):
63 #     """
64 #     计算a+b的和, 返回一个数
65 #     :param a: 第一个数
66 #     :param b: 第二个数
67 #     :return: 返回计算之后的和
68 #     """
69 #     return a + b
70 
71 # 定义函数
72 # def 函数名(形参):  1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs
73 #     函数体   return 返回值
74 # 函数名(实参)    1. 位置参数. 2.关键字参数. 3. 混合参数,

2、命名空间

 1 # a = "123"   # 全局
 2 # b = 36  # 全局
 3 # def func(): # 全局
 4 #     c = "马化腾"   # 局部
 5 #
 6 # def func2():
 7 #     print(c)
 8 
 9 a = 10
10 def func():
11     a = 20
12     print(a)    # 就近原则
13     print(globals())  # globals() 获取到全局作用域(内置,全局)中的所有名字
14     print(locals())  # locals() 查看当前作用域中的所有名字
15 func()

3、函数的嵌套

 1 # def chi():
 2 #     print("我要吃")
 3 #
 4 # print(chi())
 5 
 6 # def func1():
 7 #     print("哈哈")
 8 #
 9 # def func2():
10 #     func1()
11 #     print("呵呵")
12 #     func1()
13 # func2()
14 
15 # def func1():
16 #     print("呵呵")
17 #     def func2():
18 #         print("哈哈")
19 #     func2()
20 #     print("吼吼")
21 # func1() #
22 
23 def func1():
24     print("")
25     def func2():
26         print("")
27         def func3():
28             print("")
29         print("")
30     def func4():
31         print("哈哈")
32         func2()
33     print("")
34     func2()
35 func1()

4、global与nonlocal

 1 # def func():
 2 #     global a    # a 不再是局部变量. 是全局变量
 3 #     a = 30  # 把全局中的a重新赋值成30
 4 #     print(a)
 5 # func()
 6 # print(a)
 7 
 8 # a = 10
 9 # def func1():
10 #
11 #     def func2():
12 #         nonlocal a  # 找局部作用域中 离他最近的那个变量引入进来
13 #         a = 20
14 #         print(a)
15 #     func2()
16 #     print(a)
17 # func1()
18 
19 a = 1
20 def fun_1():
21     a = 2
22     def fun_2():
23          def fun_3():
24              nonlocal a
25              a =  4
26              print(a)
27          print(a)
28          fun_3()
29          print(a)
30     print(a)
31     fun_2()
32     print(a)
33 print(a)
34 fun_1()
35 print(a)

5、作业与练习

  1 #****************作业讲解******************
  2 '''
  3 # 2.写函数,检查传入列表或元组对象所有奇数位索引对应的元素,并将其作为新列表返回给调用者
  4 def func(lst):
  5     ll=[]
  6     for i in range(len(lst)):
  7         if i % 2 == 0:
  8             ll.append(lst[i])
  9     return ll
 10 a=[1,5,7,9,12]
 11 ret=func(a)
 12 print(ret)
 13 
 14 
 15 # 3.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5
 16 def func(a):
 17     if len(a)>5:
 18         return True
 19     else:
 20         return False
 21 ll=(1,2,3,4,5,6)
 22 ret=func(ll)
 23 print(ret)
 24 
 25 # 4.写函数,检查传入列表德尔长度,如果大于2,将列表的前两项内容返回给调用者
 26 def func(lst):
 27     if len(lst) > 2:
 28         return lst[0],lst[1]
 29 ll=[1,2,3,4,5]
 30 ret=func(ll)
 31 #ret=list(ret)
 32 print(ret)
 33 
 34 # 5.写函数,计算输入函数的字符串中,数字、字母、空格以及其他内容的个数,并返回结果
 35 def func(s=""):
 36     shuzi=0
 37     zimu=0
 38     kongge=0
 39     qita=0
 40     for c in s:
 41         if c.isdigit():
 42             shuzi+=1
 43         elif c.isalpha():
 44             zimu+=1
 45         elif c == ' ':
 46             kongge+=1
 47         else:
 48             qita+=1
 49     return shuzi,zimu,kongge,qita
 50 s="dnsdvfv esm x234467432ndjdknv456452  r4222c...#$%^^"
 51 ret=func(s)
 52 print(ret)
 53 
 54 # 6.写函数,接收两个数字参数,返回较大的那一个
 55 def func(a,b):
 56     if a > b:
 57         return a
 58     else:
 59         return b
 60     #c= a if a>b else b
 61     #return c
 62 a=input("请输入第一个数:")
 63 b=input("请输入第二个数:")
 64 ret=func(int(a),int(b))
 65 print(ret)
 66 
 67 # 7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新的内容返回给调用者
 68 # dic={"k1":"v1v1","k2":[11,22,33,44]}
 69 # dic={"k1":"v1","k2":[11,22]}
 70 def func(dic):
 71     new_dic={}
 72     for k,v in dic.items():
 73         if len(v) > 2:
 74             new_dic[k]=v[0:2]
 75         else:
 76             new_dic[k]=v
 77     return new_dic
 78 dic={"k1":"v1v1","k2":[11,22,33,44]}
 79 print(func(dic))
 80 
 81 # 8.写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。
 82 def func(lst):
 83     dic={}
 84     for i in range(len(lst)):
 85         dic[i]=lst[i]
 86     return dic
 87 lst=[11,22,33]
 88 print(func(lst))
 89 
 90 # 9.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,
 91 # 然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
 92 def func(name,age,sex,edu):
 93     f=open("student_msg",mode="a",encoding="utf-8")
 94     f.write(name+"_"+str(age)+"_"+sex+"_"+edu+"
")
 95     f.flush()
 96     f.close()
 97 
 98 # 11.写函数,用户传入修改的文件名,与要修改的内容(两个:修改与被修改),执行函数,完成整个文件的批量修改操作。
 99 import os
100 def func(filename,old,new):
101     with open(filename,mode="r",encoding="utf-8") as f1,
102         open(filename+"_副本",mode="w",encoding="utf-8") as f2:
103 
104         for line in f1:
105             s=line.replace(old,new)
106             f2.write(s)
107     os.remove(filename)
108     os.rename(filename+"_副本",filename)
109 func("student.msg","学","本")
110 '''
111 
112 #*************今日练习*********************
113 '''
114 # 动态传参
115 # 1、*位置参数
116 def func(*n):
117     sum=0
118     for i in n:
119         sum+=i
120     return sum
121 print(func(5,6,7))
122 
123 # 2、**关键字参数
124 def func(**food):
125     print(food)   #接收到的是字典
126 func(good_food="盖浇饭",bad_food="辣条")
127 '''
128 # 命名空间
129 # 加载顺序:内置空间 > 全局空间 > 局部空间
130 # 取值顺序:局部空间 > 全局空间 > 内置空间(就近原则)
131 a="123"       #全局
132 b=12          #全局
133 def func():   #全局
134     c="麻花特" #局部
135     def hah():#局部
136         pass
原文地址:https://www.cnblogs.com/fengxb1213/p/12290765.html