赞
踩
变量的作用域就是指在代码中变量能使用的位置
- def func(a):
- print(a)
- data = 10
- func(data) # a=data 参数a引用了data的数据
- data2 = 20
- func2(data2)
全局变量
在函数外定义,可以在代码中任意位置使用的变量
局部变量
在函数内定义,在函数内能使用
- # 变量引用
- data = 10 # 外部的变量值叫做全局变量
-
- def func(data):
- # 参数传参引用方式 获取外部的变量值进行计算
- # 内部的变量值叫局部变量
- data = data+1
- print(data)
-
- def func2():
- # data没有参数是,当成局部变量,但是此时局部变量data没有被定义会报错
- # 通过 global 声明外部变量值作为局部变量使用
- global data
- data = data+1
- print(data)
- def func3():
- global data
- data = data+1
- print(data)
-
-
- def func4(data):
- data = data+1
- print(data)
-
- func(data)
- func4(data)
-
- # func2()
- # func3()
变量的作用域 指的变量能使用的范围
全局变量 可以代码的任意位置使用
局部变量 只在当前函数内有效
在函数内使用全局变量 有两种方式
第一种 当成参数传参 将全局变量传递给函数参数(函数内的局部变量)
当成参数使用时 则相当于参数引用了全局变量的值,对参数进行操作,不影响全局全局变量的值
第二种 global声明 在函数内进行使用
在函数内直接操作全局变量,会修改全局变量的值
- # 多个函数中都要使用的变量可以定义成全局变量,通过global声明,就可在多个函数就可以共享全局数据
- name_list = []
- password_list = []
-
- # 登录注册功能
- def login():
- # 函数作用域
- # 通过四个空格,来确认函数所执行的逻辑从哪里开始
- # 列表,元组,集合,字典数据可以省略global声明
- global name_list
- global password_list
- for num in range(3): # [0,3) 0,1,2
- name = input('请输入用户名:')
- password = input('请输入密码:')
- # 先判断用户名是否正确
- if name in name_list:
- # 在判断密码是否正确
- if password in password_list:
- print('登录成功')
- # 适应break关键,会结束循环,不再进行取值
- break
- else:
- print('密码不正确')
- else:
- print('用户名不正确')
-
- def register():
- global name_list
- global password_list
- name = input('请输入注册的用户名:')
- password = input('请输入出注册的密码:')
- # 将用户的名字和密码添加到全局的数据列表
- name_list.append(name)
- password_list.append(password)
-
- while 1==1:
- num = input('1-登录 2-注册 3-支付 4-下单 5-退出程序:')
- if num == '1':
- # 函数功能的调用
- login() # 函数名()
- elif num == '2':
- register()
- elif num == '3':
- pass
- elif num == '4':
- pass
- else:
- break
- data = 10
-
-
- def func(a):
- """
- 将字符串数据进行复制
- :param a:
- :return:
- """
- data_str = 'itcast'
- print(data_str * a)
-
-
- def func2(data):
- """
- 数据相加
- :param data:
- :return:
- """
-
- data = data+25
- print(data)
-
- func2(data)
- func(data)
形参
def func(形参)
在函数定义时指定的参数
本质形参可以理解为函数定义的内部变量,接收外部传递的数据
缺省参数
可以定义一个默认值,当形参没有传递数据时,可以使用默认值
不定长参数
接收任意个数的数据
*args 不能接受关键字传参的数据 接受位置参数的数据
**kwargs 接受关键字参数数据
实参
func(实参)
在函数调用时指定的参数数据
位置参数
在传递实参数据时,需要按照参数的位置进行数据的传递
传递数据个数个形参个数一致
关键字参数
按照形参的名称传递数据
形参=数据
- def func(形参):
-
- # 函数调用时传递的参数数据 实参
- func(实参)
-
- # 使用实参传递数据
- # 定义一个学生列表保存多个学生数据
- stu_list = []
- def add_student(name,age,gender,address):
- """
- 添加学生数据
- :param name: 姓名 str类型
- :param age: 年龄 int类型
- :param gender: 性别 str类型
- :param address: 地址 str类型
- :return:
- """
- # 往列表中添加学生数据
- stu_list.append({'name':name,'age':age,'gender':gender,'address':address})
-
-
- # 实参传递数据的方式1 位置参数
- # 按照参数的顺序和数量传递数据
- add_student('张三',20,'男','北京') # 位置传参
- print(stu_list)
-
- # 方式2 关键字参数
- # 使用参数的名称指定数据,和顺序无关
- add_student(address='上海',age=22,name='李四',gender='男') # 使用参数名传递数据
- print(stu_list)
-
- # 混合使用 保证位置参数在前面 关键字参数在后面
- # add_student(address='广州',20,'张三')
- add_student('王五',20,gender='男',address='广州')
- print(stu_list)
- # 使用实参传递数据
- # 定义一个学生列表保存多个学生数据
- stu_list = []
- def add_student(name,age,gender,address='北京'):
- """
- 添加学生数据
- :param name: 姓名 str类型
- :param age: 年龄 int类型
- :param gender: 性别 str类型
- :param address: 地址 str类型 默认值北京 缺省参数,当没有传递数据是,使用默认的数据
- :return:
- """
- # 往列表中添加学生数据
- stu_list.append({'name':name,'age':age,'gender':gender,'address':address})
-
-
- # 实参传递数据的方式1 位置参数
- # 按照参数的顺序和数量传递数据
- add_student('张三',20,'男','北京') # 位置传参
- print(stu_list)
-
- # 方式2 关键字参数
- # 使用参数的名称指定数据,和顺序无关
- add_student(address='上海',age=22,name='李四',gender='男') # 使用参数名传递数据
- print(stu_list)
-
- # 混合使用 保证位置参数在前面 关键字参数在后面
- # add_student(address='广州',20,'张三')
- add_student('王五',20,gender='男',address='广州')
- print(stu_list)
-
- add_student('赵六',20,gender='男')
- print(stu_list)
- # 使用形参接受数据
- # 定义一个学生列表保存多个学生数据
- stu_list = []
- # 不确定学生数据到底有哪些数据内容,传递的数据个数无法确定
- # 此时就可以使用不定长参数,接受任意个数的数据
- def add_student(*args,**kwargs):
- # *args接受位置参数传递的多个数据,会将数据保存在元组中
- # **kwargs接受关键字参数传递多个数据,将数据保存在字典中
- # 往列表中添加学生数据
- if len(args) !=0:
- stu_list.append(args)
- if len(kwargs) !=0:
- stu_list.append(kwargs)
-
- add_student('张三',20,'男')
- print(stu_list)
-
- add_student('李四',22,'男','北京')
- print(stu_list)
-
- add_student(name='张三',age=20)
- print(stu_list)
-
- add_student(name='张飞',age=20,address= '河北')
- print(stu_list)
- # 将外部数据传递到函数内部
- # 方式1 定义全局变量
- data_str = 'itcast' # 不可变类型数据 数据本身不可修改
- data_list = ['hadoop','hive','spark','python'] # 可变类型 数据本身可修改
-
- def func():
- # 在函数内进行修改全局变量数据
- # 需要使用global 声明
- global data_str # 不可变类型
- data_str = data_str+'python'
- print(data_str)
-
- # global data_list 数据是可变类型,省略global声明
- data_list.append('flink')
- print(data_list)
-
- func()
- # # 将外部数据传递到函数内部
- # # 方式1 参数传递
- data_str = 'itcast' # 不可变类型数据 数据本身不可修改
- data_list = ['hadoop','hive','spark','python'] # 可变类型 数据本身可修改
-
- # 在函数定义时,定义参数接收数据
- def func(data):
- print(id(data))
-
-
- # 函数调用时传递参数数据 相当于是变量赋值
- func(data_str) # data = data_str # 当对data进行操作就是对data_str
- print(id(data_str))
- print('----------------------')
- func(data_list) # data = data_list # 当对data进行操作就是对data_list
- print(id(data_list))
- # 局部变量数据传递到外部
-
- def func():
- data = [1, 2, 3]
- data.append(4)
- print(data)
- # 需要将函数内的局部 变量传递外部使用
- # 借助返回值return 将内部的局部变量返回外部使用
- print(id(data))
- return data
-
-
- # 调用函数时,定义变量接收函数返回值
- data_res = func() # 返回值 等价 data_res = data
- print(data_res)
- print(id(data_res))
-
-
- # 可以将上一个函数的返回值传递到下一个函数
- def func2(data2):
- # data2 = data_res
- print(data2)
- print(id(data2))
- data2.append(5)
-
- # 将data_res 传递给func2
- func2(data_res)
-
- # data,data_res,data2代表的同一个数据
- print(data_res)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。