Python基础
- Python基础-PEP8: Python代码风格指南
- Python基础-面向对象(四)
- Python基础-面向对象(三)
- Python基础-面向对象(二)
- Python基础-面向对象(一)
- Python基础-模块
- Python基础-异常的捕获和处理
- Python基础-文件夹的操作
- Python基础-文件的操作
- Python基础-函数(三)
- Python基础-函数(二)
- Python基础-函数(一)
- Python基础-字符串,元组,列表,字典,集合之间的相互转
- Python基础-字符串,元组,数组,字典-公共方法
- Python基础-集合set
- Python基础-字典
- Python基础-元组
- Python基础-列表
- Python基础-字符串
- Python基础-break和continue
- Python基础-for循环
- Python基础-while循环
- Python基础-if判断语句
- Python基础-数据类型转换,ASCII码对照表
- Python基础-运算符
- Python基础-输出print和输入input
- Python基础-标识符和关键字
- Python基础-变量以及类型
- Python基础-注释的引入
- Python基础-第一个python程序
- Python基础-简介
Python基础-函数(二)
Python基础-函数(二)
Python函数局部变量
局部变量,就是在函数内部定义的变量。
其作用范围是这个函数内部,即只能在这个函数中使用,在函数的外部是不能使用的。
因为其作用范围只是在自己的函数内部,所以不同的函数可以定义相同名字的局部变量。
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储。
当函数调用时,局部变量被创建,当函数调用完成后这个变量就不能够使用了。
def test(): a = 100 # 这个变量a就是局部变量 return a
Python函数全局变量
如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。
在函数外边定义的变量叫做全局变量。
全局变量能够在所有的函数中进行访问
b = 200 #这个就是全局变量 def test(): a = 100 return a+b
当函数内出现局部变量和全局变量相同名字时,函数内部中的 变量名 = 数据 此时理解为定义了一个局部变量,而不是修改全局变量的值
修改全局变量:如果在函数中出现global 全局变量的名字 那么这个函数中即使出现和全局变量名相同的变量名 = 数据 也理解为对全局变量进行修改,而不是定义局部变量
如果在一个函数中需要对多个全局变量进行修改,那么可以使用global a b
a = 100 def test(): global a # 可以对全局变量a修改 print(a) #修改前100 a = 200 print(a) # 修改后200 print(a) # 在函数外使用,a=100 已经被修改为a=200
可以使用一次global对多个全局变量进行声明: global a, b
多函数程序的基本使用流程
一般在实际开发过程中,一个程序往往由多个函数(后面知识中会讲解类)组成,并且多个函数共享某些数据,这种场景是经常出现的,因此下面来总结下,多个函数中共享数据的几种方式
1. 使用全局变量
a = 100 def test_a(): global a a = 200 # 通过全局变量修改a的值为200 def test_b(): print(a) #通过获取test_a函数处理之后全局变量a的值 test_a() # 先执行test_a() test_b() # 再执行test_b(),结果为200。如果不先执行test_a(),那么a的值还是100
2. 使用函数的返回值、参数
def test_a(): return 100 # 通过return将一个数据结果返回 def test_b(num): print(num) # 通过形参的方式保存传递过来的数据,就可以处理了 test_a() result = test_a() # 1. 先调用test1得到数据并且存到变量result中 test_b(result) # 2. 调用test2时,将result的值传递到test2中,从而让这个函数对其进行处理。输出结果为100
3. 函数嵌套调用
def test_a(): return 100 # 通过return将一个数据结果返回 def test_b(): # 1. 先调用test_a并且把结果返回来 num = test_a() # 2. 对num进行处理 print(num) # 调用test2时,完成所有的处理 test_b() #结果是100
函数返回值(二)
前面我们已经学习了返回值只有一个的函数,那么如果返回值有多个呢?
1,返回值有多个return
如果程序设计有多个return是可以的,那是因为不同的场景下执行不同的return。但是只要有一个return语句被执行到,那么这个函数就会结束了,后面的return也没有什么用处了。
def test(num): # 根据不同的参数num的值,来返回相应的结果 if num == 100: return 100 elif num == 200: return 200 else: return '参数必须为100或者200' a = test(100) print(a) # 100 b = test(200) print(b) # 200 c = test(500) print(c) # 参数必须为100或者200
2,一个函数返回多个数据的方式
return后面可以是元组,列表、字典等,只要是能够存储多个数据的类型,就可以一次性返回多个数据
如果return后面有多个数据,那么默认是元组
def test_dict(): return {'name':'bayi', 'age':35, 'sex':'男'} # 返回的是一个字典 a = test_dict() print(type(a)) # <class 'dict'> print(a) # {'name': 'bayi', 'sex': '男', 'age': 35} def test_list(): return [1,2,3,4] # 返回的是一个列表 b = test_list() print(type(b)) #<class 'list'> print(b) #<class 'list'> def test_default(num1, num2): result1 = num1 + num2 result2 = num1 - num2 return result1,result2 #返回的是两个数据 c = test_default(10,5) print(type(c)) #<class 'tuple'> print(c) #(15, 5)
函数参数(二)
前面我们学习了函数参数(一),下面我们继续来学习函数的参数。
1,缺省参数
在形参中默认有值的参数,称之为缺省参数,比如def test(a,b=500),参数b就是缺省参数。
调用函数时,缺省参数的值如果没有传入,则取默认值。
注意:缺省参数一定要位于参数列表的最后面,比如def test(a,b=500),参数b在后面。
def info(name,age=35): print('name:%s' %name, end=' ') print('age:%s' %age) info('bayi') #name:bayi age:35 info('bayi',25) #name:bayi age:25
2,不定长参数
有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。
不定长参数格式:def test(a,b,*args,**kwargs)
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组。
而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。
def test(a,b,*args,**kwargs): print('a=%d' %a) print('b=%d' %b) print('args=',args) print('kwargs=',kwargs) for key, value in kwargs.items(): print("key=%s" % value) test(1, 2, 3, 4, 5, m=6, n=7, p=8) ''' 输出结果: a=1 b=2 args= (3, 4, 5) kwargs= {'p': 8, 'n': 7, 'm': 6} key=8 key=7 key=6 ''' #另外一种传参方式:将一个元组和字典直接传进去 c = (3, 4, 5) d = {"m":6, "n":7, "p":8} test(1, 2, *c, **d) # 注意元组与字典的传参方式 # 输出结果跟test(1, 2, 3, 4, 5, m=6, n=7, p=8)是一样的
说明:缺省参数在*args后面,**kwargs前面,比如def test(a, *args, b=22, c=33, **kwargs):
如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的
3,把一个函数作为另一个函数的参数
def my_fun(a,b): sum = a+b return sum def sum(my_fun,c): sum_all = my_fun + c return sum_all res = sum(my_fun(10,20),30) print(res)
最后修改:2020年2月27日 16:57