- 局部变量 local variable
定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
局部变量只能在函数内部使用
局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
全局变量 global variable
定义在函数外部,模块内部的变量称为全局变量
全局变量所有函数都可以直接访问(取值),但函数内部不能将变量
赋值
局部变量说明:
在函数内部的赋值语句不会对全局变量造成影响
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个
模块的范围内访问
示例见:
a = 100 # 创建 全局变量a绑定100
b = 200
def fx(c): # c是形参,c也是局部变量,当函数调用结束后,c将被销毁
b = 999
d = 400 # 创建局部变量绑定 400
print(a, b, c, d)
fx(300)
print('a=', a)
print('b=', b) # 200
# print(d) # 出错
- globals 函数 和 locals 函数
globals() 返回当前全局作用域内变量的字典
locals() 返回当前局部作用域内变量的字典
示例见:
# 此示例示意globals() 函数 和 locals函数的作用
a = 1
b = 2
c = 3
def fn(c, d):
e = 300
# 此时有几个全局变量,有几个局部变量???
print("locals()返回:", locals())
print("-------------------------")
print('globals() 返回:', globals())
print(c) # 100
mydict = globals()
print('全局的c=', mydict['c']) # 3
print(globals()['c']) # 3
fn(100, 200)
print("程序结束")
练习:
1. 写一个函数 isprime(x) 判断x是否是素数,如果是素数返回
True,否则返回False
def isprime(x):
if x < 2:
return False
for i in range(2, x):
if x % i == 0:
return False
return True
2. 写一个函数 prime_m2n(m, n) 返回从m开始,到n结束(不包含n)
def prime_m2n(m, n):
L = [] # 先创建一个容器,准备存放[m, n),的素数
for x in range(m, n):
if isprime(x):
L.append(x)
return L
L = prime_m2n(10, 20)
print(L) # [11, 13, 17, 19]
范围内的素数的列表,并打印这些整数
如:
L = prime_m2n(10, 20)
print(L) # [11, 13, 17, 19]
3. 写一个函数primes(n) 返回指定范围n以内(不包含n)的素数的
列表,并打印
如:
L = primes(10)
print(L) # [2, 3, 5, 7]
1) 打印100以内的全部素数
2) 打印200以内全部素数的和
def primes(n):
return prime_m2n(0, n)
L = primes(10)
print(L) # [2, 3, 5, 7]
# 1) 打印100以内的全部素数
print(primes(100))
# 2) 打印200以内全部素数的和
print(sum(primes(200)))
4. 写一个函数myrange,可以传入1~3个参数,实际意义与range函
数完全相同,返回符合range函数规则的列表
如:
L = myrange(4)
print(L) # [0, 1, 2, 3]
L = myrange(4, 6)
print(L) # [4, 5]
L = myrange(1, 10, 3)
print(L) # [1, 4, 7]
(可以调用range函数)
def myrange(a, b=None, c=None):
if b is None:
start = 0 # 开始值
stop = a # 结束值
else:
start = a
stop = b
# 重新确定步长
if c is None: # 没有给第三个参数
step = 1 #步长
else:
step = c
L = [] # 先创建列表
# 此处添加附合条件的数据
for x in range(start, stop, step):
L.append(x)
return L
L = myrange(4)
print(L) # [0, 1, 2, 3]
L = myrange(4, 6)
print(L) # [4, 5]
L = myrange(1, 10, 3)
print(L) # [1, 4, 7]
5. 修改原<<学生信息管理程序>> 将程序的整体功能封装为两个函数
1) 编写函数input_student() 获取学生信息,以学生姓名为
空输入结束,返回学生信息的字典的列表,列表同之前列表
如:
L = input_student()
print(L) #[{'name': 'xiaozhang', ...},{...}]
2) 编写函数output_student(L) 以表格的形式打印L列表中的
学生信息
如:
output_student(L) # 打印表格 ### 略