一、名称空间的作用域
名称空间:
作用域额:变量能够作用的范围
1. 内置的名称空间
在程序的任何阶段任意位置都可以使用( 全局有效)
2. 全局名称空间
在程序的任何阶段任意位置都可以使用( 全局有效)
3. 局部的名称空间
在函数内部有效( 局部有效)
注意:
局部的变量能不能在任何位置使用?局部变量一般都在函数的内部使用,外部一般不能使用
在全局定义的变量我们称之为全局变量,全局变量在任何位置任何阶段都可以使用
二、global和nonlocals关键字的使用
'''
global的使用:
在函数的内部不能直接修改外部的变量:
1. 在函数内部修改外部的不可变类型的数据,需要使用 global 关键字声明
2. 在函数的内部修改外部的可变类型的变量不需要使用global关键字
'''
x = 111
def index ( ) :
global x
x = 222
index( )
print ( x)
name_list = [ 'kevin' , 'jack' ]
def index ( ) :
name_list. append( 'tony' )
index( )
print ( name_list)
'''*************************************************'''
'''
nonlocal的使用:
1. 在函数的内部的局部修改外部的局部的可变类型,要使用关键字 nonlocal 声明
2. 在函数的内部的局部修改外部的局部的不可变类型,不需要使用关键字 nonlocal 声明
'''
def outer ( ) :
x = 1
def inner ( ) :
nonlocal x
x = 2
inner( )
print ( x)
outer( )
def outer ( ) :
name_list = [ 'kevin' , 'tank' ]
def inner ( ) :
name_list. append( 'tony' )
inner( )
print ( name_list)
outer( )
三、函数对象(函数名)
函数名的使用有四种方法
def index ( ) :
print ( 'index' )
'''函数名就是函数的内存地址'''
print ( index)
index( )
a = index( )
a( )
def index ( ) :
print ( 'from index' )
def func ( func_name) :
print ( 'from func' )
func_name( )
func( index)
def index ( ) :
print ( 'from index' )
def func ( ) :
print ( 'from func' )
return index
return_value = func( )
return_value( )
print ( return_value)
def index ( ) :
print ( 'from index' )
l = [ 1 , 2 , 3 , index]
print ( l)
l[ 3 ] ( )
案例
def register ( ) :
print ( 'register' )
def login ( ) :
print ( 'login' )
def transfer ( ) :
print ( 'transfer' )
def withdraw ( ) :
print ( 'login' )
def shopping ( ) :
print ( 'shopping' )
def other_func ( ) :
print ( 'other_func' )
func_dict = {
'1' : register,
'2' : login,
'3' : transfer,
'4' : withdraw,
'5' : shopping,
'6' : other_func
}
while True :
print ( """
1. 注册功能
2. 登录功能
3. 转账功能
4. 提现功能
5. 购物功能
6. 其它功能
""" )
choice = input ( '请输入你选择的序号>>>:' ) . strip( )
if choice in func_dict( ) :
func_dict. get( choice) ( )
四、函数的嵌套调用
def my_max ( a, b) :
if a > b:
return a
return b
res = my_max( 1 , 10 )
print ( '输出的结果是:' , res)
def my_max ( a, b) :
if a > b:
return a
return b
def many_max ( a, b, c, d) :
res = my_max( a, b)
res1 = my_max( res, c)
res2 = my_max( res1, d)
return res2
return_max = many_max( 3 , 5 , 6 , 2 )
print ( return_max)
五、函数的嵌套定义(了解)
def all_func ( type ) :
def login ( ) :
print ( 'login' )
def transfer ( ) :
print ( 'login' )
def withdraw ( ) :
print ( 'login' )
def shopping ( ) :
print ( 'login' )
def shopping1 ( ) :
print ( 'login' )
if type == 1 :
login( )
elif type == 2 :
transfer( )
elif type == 3 :
withdraw( )
elif type == 4 :
shopping( )
all_func( 1 )
all_func( 2 )
all_func( 3 )
六、闭包函数
'''
1.什么是闭包函数?
闭:就是函数内部定义函数,至少两层函数
包:内部的函数使用外部函数名称空间的名字
2.注意:只有满足同时满足以上两个条件才能称之为是闭包函数
闭包函数其实就是给函数传参的第二种方式
'''
def outer ( ) :
a = 20
b = 10
def my_max ( ) :
if a > b:
return a
return b
return my_max
res = outer( )
print ( res( ) )
import requests
def outer ( url) :
def get_content ( ) :
res = requests. get( url)
with open ( 'baidu.html' , 'wb' ) as f:
f. write( res. content)
return get_content
res = outer( 'https://www.jd.com' )
res( )
七、装饰器(难点、重点)
"""
装饰器:
是名称空间、闭包函数、函数嵌套等知识点汇总而来的知识点
什么是装饰器:
器:就是工具
装饰:给被装饰的对象添加额外的功能
装饰器的核心思想:
就是在'不改变被装饰对象'内部的代码和'原有调用方式'的基础上再'添加额外的功能'
"""
import time
def index ( ) :
time. sleep( 3 )
print ( 'from index' )
start_time = time. time( )
index( )
end_time = time. time( )
print ( 'index函数一共执行了%s秒' % ( end_time - start_time) )