目录
作用域:名称空间所能够作用的范围 分类: 内置名称空间:程序任何阶段、位置均可使用,全局有效 全局名称空间:程序任何阶段、位置均可使用,全局有效 局部名称空间:一般情况下只在各自的局部名称空间中有效
实例如下:
# 不可变类型,局部修改全局需要global关键字声明
x = 1
def func():
global x
x = 2
print('x是:', x)
func()
# x是: 2
# 可变类型,局部修改全局不需要global关键字声明
a = [1, 2]
def func1():
a.append(3)
print(a)
func1() # [1, 2, 3]
# nonlocal
# 不可变类型,内局部想要修改外局部需要nonlocal关键字声明
def func2():
num = 123
def func3():
nonlocal num
num = 456
print(num)
func3()
func2()
# 结果
#456
# 可变类型,内局部想要修改外局部不需要nonlocal关键字声明
def func4():
num1 = [1,2,3]
def func5():
nonlocal num1
num1.append(4)
print(num1)
func5()
func4()
#结果
# [1, 2, 3, 4]
注意!所有情况的变量名不要加括号使用,除非调用
实例如下:
def func1():
s = '赋值给变量了'
print(s)
a = func1
# a 为函数的内存地址
print(a)
# a()就是在调用函数func1
a()
实例如下:
# 函数名可以当做实参传递
def fun2(a):
print(a)
a()
def fun3():
print('当做实参传递')
fun2(fun3)
# 结果
# <function fun3 at 0x00000264A8C4BD08>
# 当做实参传递
实例如下:
def func():
print('确实作为返回值了')
def func1():
print('函数名作为返回值')
return func
res = func1() # 调用func1函数,返回值func函数赋给res
res() # res()就是调用func函数,打印了func里面的内容
print(res) # 输出func函数的内存地址
# 结果
# 函数名作为返回值
# 确实作为返回值了
# <function func at 0x000002671C602EA0>
实例如下:
def func():
print('作为容器的元素')
return '作为容器的元素'
# 不加括号返回函数内存地址
lst = [1,2,3,4,func]
# 加括号返回函数的返回值
lst1 = [1,2,3,4,func()]
print(lst)
print(lst1)
实例如下:
# 函数的嵌套使用
# 原理,函数定义的时候都是全局名称所以可以相互调用
def func():
print('func函数')
def func1():
func()
print('func1函数')
func1()
练习题:
# 函数嵌套,比较四个数大小
def two_max(a,b):
if a>b:
return a
return b
def four_max(a,b,c,d):
res = two_max(a,b)
res1 = two_max(res,c)
res2 = two_max(res1,d)
return res2
fournum_max = four_max(1,2,3,4)
print(fournum_max)
实例如下:
def fun():
x = 1
def fun1():
print('x:',x)
return fun1
res = fun()
res()
# 结果
x: 1
实例如下:
def fun(a,b):
if a>b:
return a
return b
#函数体代码需要a,b两个参数那么就在形参定义的时候直接定义
实例如下:
def num(a,b):
def max():
if a>b:
return a
return b
return max
res = num(1,2)
print(res())
print(res())
res = num(3,5)
print(res())
print(res())
print(res())
'''穿一次参数就可以多次调用'''
开放封闭的原则
在不改变被“装饰”对象内部代码和原有调用方式的基础之上添加额外的功能。
实例如下:
# 计算程序的执行时间
import time
# 获取的结果叫时间戳(运行代码的那一刻距离1970-1-1所经历的秒数)
print(time.time())
def index():
time.sleep(3)
print('计算时间停止了3秒后的结果!')
# 统计开始时间
start_time = time.time()
index()
# 统计结束的时间
end_time = time.time()
# 输出时间差
print(end_time-start_time)
# 时间运行的时间
print(end_time-start_time-3)