2022.04.11-python学习之函数

  1 # File : learning_09_function.py
  2 # Datetime : 2022/4/10 0010 16:20
  3 import math
  4 
  5 
  6 # 函数:
  7 # 是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
  8 
  9 # 函数的作用
 10 # 1. 减少重复代码
 11 # 2. 使程序变的可扩展,保持代码一致性
 12 # 3. 使程序变得易维护
 13 
 14 
 15 # 1. 函数的创建
 16 # 语法格式
 17 # def functionname([parameterlist]):
 18 #     ['''comments''']
 19 #     [functionbody]
 20 # 参数说明
 21 #  functionname: 函数名称,在调用函数时使用
 22 #  parameterlist: 可选参数,用于指定向函数中传递的参数.\
 23 #                如果有多个,各参数间使用逗号分割,如果不指定则表示该函数没有参数,在调用时也不指定参数
 24 #  comments: 可选参数,表示为函数添加注释,注释的内容通常是说明该函数的功能,要传递参数的作用等
 25 #  functionbody: 可选参数,用于指定函数体,即该函数被调用后要执行的功能代码,如果函数有返回值则使用return语句返回
 26 
 27 def print_ok():
 28     """
 29     打印OK
 30     """
 31     print("OK")
 32 
 33 
 34 print_ok()
 35 
 36 
 37 # 2. 参数传递
 38 # 形参:在定义函数时,函数名后面括号中的参数为形式参数,也称为 形参
 39 # 实参:在调用函数时,函数名后面括号中的参数为实际参数,也称为 实参
 40 def add_number(a, b):
 41     print(a + b)
 42 
 43 
 44 add_number(3, 5)
 45 
 46 
 47 # 3. 参数位置
 48 # 3.1 实参数量必须与定义函数时形参数量一致
 49 # 3.2 位置必须与定义时一致(如:定义函数时函数类型分别有int和str类型,调用函数时需要和定义参数类型一致)
 50 def print_info(name, age):
 51     print("我的名字叫%s,我今年%d岁" % (name, age))
 52 
 53 
 54 print_info("xiaoming", 18)
 55 # 4. 关键字参数
 56 #  关键字参数是指使用形参的名字来确定输入的参数值,同个该方式指定实参,不再需要与形参的位置完全一致
 57 print_info(age=18, name="xiaomei")
 58 
 59 
 60 # 5. 为参数设置默认值
 61 # 调用函数时,如果没有指定某个参数将抛出异常,
 62 # 即在定义函数时,直接指定形式参数的默认值,
 63 # 当调用函数没有传入参数时,则直接使用定义函数时设置的默认值
 64 def print_info2(name, age=18):
 65     print("我的名字叫%s,我今年%d岁" % (name, age))
 66 
 67 
 68 print_info2("zhangsan")
 69 
 70 
 71 # 6. 可变参数
 72 # 可变参数也称为不定长参数,即传输函数中的实际参数可以是0个,1个,2个到任意个
 73 # 定义可变参数有两种形式
 74 # 6.1 *parameter 表示接受任意多个实际参数并将其放到一个元组中
 75 # 6.2 **parameter 表示接受任意多个显示赋值的实际参数,并将其放到一个字典中
 76 def addnumber(*args):
 77     sum1 = 0
 78     for i in args:
 79         sum1 += i
 80     print(sum1)
 81 
 82 
 83 addnumber(1, 2, 3, 4, 5)
 84 
 85 
 86 def print_infos(**kwargs):
 87     for item in kwargs:
 88         print("%s:%s" % (item, kwargs[item]))
 89 
 90 
 91 print_infos(name="张三", age=18, height=180)
 92 
 93 
 94 def print_info_full(*args, **kwargs):
 95     sum2 = 0
 96     for i in args:
 97         sum2 += i
 98     print("求和结果为%d" % sum2)
 99     for item in kwargs:
100         print("%s:%s" % (item, kwargs[item]))
101 
102 
103 print_info_full(1, 2, 3, name="张三", age=18, height=180)
104 
105 
106 # 函数参数传递顺序
107 # def fun_name(parameter, default_parameter=default_value, *args, **kwargs):
108 #     """
109 #      参数说明
110 #     :param parameter: 固定参数
111 #     :param default_parameter: 默认值参数
112 #     :param args: 元组类型参数
113 #     :param kwargs:字典类型参数
114 #     :return:
115 #     """
116 #     pass
117 
118 # 7. 函数的返回值
119 # 要想获取函数的执行结果,就可以用return语句把结果返回
120 # 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,即 return语句代表着函数的结束
121 # 如果未在函数中指定return,那这个函数的返回值为None
122 # return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。
123 
124 def number_sun(a, b):
125     return a + b
126 
127 
128 c = number_sun(1, 2)
129 print(c)
130 
131 # 8.变量的作用域
132 # 变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,在访问时就会出现错误.
133 # L:local,局部作用域,即函数中定义的变量;
134 # E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
135 # G:globa,全局变量,就是模块级别定义的变量;
136 
137 # B:built-in,系统固定模块里面的变量,比如int, bytearray等。
138 # 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
139 x = int(2.9)  # int built-in
140 g_count = 0  # global
141 
142 
143 def outer():
144     o_count = 1  # enclosing
145 
146     def inner():
147         i_count = 2  # local
148         print(o_count)
149 
150     # print(i_count) 找不到
151     inner()
152 
153 
154 outer()
155 # print(o_count) #找不到
156 
157 # 作用域产生:在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,
158 # 其它的代码块(如if、try、for等)是不会引入新的作用域的
159 # global关键字
160 # 当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,
161 # 当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:
162 count = 10
163 
164 
165 def outer():
166     global count
167     print(count)
168     count = 100
169     print(count)
170 
171 
172 outer()
173 
174 
175 # nonlocal关键字
176 # global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,
177 # 当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了
178 def outer():
179     count = 10
180 
181     def inner():
182         nonlocal count
183         count = 20
184         print(count)
185 
186     inner()
187     print(count)
188 
189 
190 outer()
191 
192 # 9. 匿名函数
193 # 匿名函数是指没有名字的函数,它主要应用在需要一个函数,但是又不想费神去命名这个函数的场合.通常这样的函数只使用一次.
194 # 语法格式
195 # result = lambda [arg1 [,arg2,...argn]] : expression
196 # 参数说明:
197 # result 用于调用lambda表达式
198 # [arg1 [,arg2,...argn]] 可选参数,用于指定要传递的参数列表,多个参数使用逗号分隔
199 # expression 必选参数,用于指定一个实现具体功能的表达式,如果有参数,那么在该表达式中将应用这些参数
200 r = 10  # 定义圆的半径
201 result = lambda r: math.pi * r * r
202 print("圆的面积为%0.2f" % result(r))
203 
204 
205 # 递归函数
206 # 在函数内部调用自身本身,这个函数就是递归函数。
207 # 斐波那契列数(这个数列从第3项开始,每一项都等于前两项之和。)
208 def fibonacci_number(num):
209     if num <= 1:
210         return num
211     return fibonacci_number(num - 1) + fibonacci_number(num - 2)
212 
213 
214 print(fibonacci_number(9))  # 输出第10个数 输入9因为是以0开头

 

posted @ 2022-04-12 01:22  陈亦洺  阅读(25)  评论(0编辑  收藏  举报