python基础_12

*与**在实参中的作用

def func(*args, **kwargs):
    print(args)
    print(kwargs)


# func()  # ()  {}
# func([1, 2, 3, 4, 5, 6])  # ([1, 2, 3, 4, 5, 6],) {}
# l1 = [1, 2, 3, 4, 5, 6]
# func(l1[0], l1[1], l1[2], l1[3], l1[4], l1[5])  # (1,2,3,4,5,6) {}
# func(*l1)  # (1, 2, 3, 4, 5, 6) {}
'''func(1,2,3,4,5,6)'''
# s = 'hello'
# func(*s)  # ('h', 'e', 'l', 'l', 'o')   {}
'''func('h','e','l','l','o')'''
# d = {'1': 'jason', '2': 18}
# func(*d)  # ('1', '2') {}
'''func('1','2')'''

# d1 = {'username': 'jason', 'pwd': 123}
# func(**d1)  # ()  {'username': 'jason', 'pwd': 123}
# func(username='jason', pwd=123)  # ()  {'username': 'jason', 'pwd': 123}
"""
*与**在形参中的作用
*与**在实参中的作用
"""

命名关键字参数(冷门了解)

# def func(a,b,*args):
#     pass
# func(1,2)
# func(a=1,b=2)
# func(1,b=222)
'''需要形参在传实参的时候 必须按照关键字参数才可以'''
# 在形参*args的后面
# def func(a, b, *args, c):
#     print(a, b, args, c)
# func(1,2,3,4,5,6,7)  # 报错
# func(1, 2, 3, 4, 5, 6, c=666)
# 如果形参中还有**kwargs 那必须在它的前面
def func(a,b,*args,c,**kwargs):
    pass
func(1,2,3,4,5,6,c=123,name='jason')

名称空间

就是用来存放变量名与数据值之间绑定关系的地方
"""
回忆
	name = 'jason'
	在内存中申请一块内存空间存储jason 然后绑定变量名name
变量名name与值jason的绑定关系就会被存储到名称空间中 之后使用名字都是去名称空间中查找并锁定对应的数据值
	del name
	删除的不是数据值 而是变量名以及变量名与数据值之间的绑定关系
"""
名称空间的分类
	内置名称空间
    	python解释器运行就会立刻创建的空间
        	写代码过程中可以直接使用的名字都在该空间中
            	eg:len() print() input() ...
	全局名称空间
    	py文件运行代码过程中产生的名字都会存入该空间
        	普通代码里面的变量名
           分支结构里面的变量名
        	循环结构里面的变量名
           定义函数的函数名
        	定义类的类名
	局部名称空间
    	函数体代码运行过程中产生的名字都会存入该空间
 
名称空间的存活周期
	内置名称空间
    	解释器运行(创建)  解释器关闭(销毁)
	全局名称空间
    	py文件运行(创建)  py文件结束(销毁)
	局部名称空间
    	函数体代码运行(创建)  函数体代码结束(销毁)

名字的查找顺序

"""查找名字之前一定要先看自己在哪个名称空间"""
1.当前在全局名称空间
	全局名称空间	 >>>:   内置名称空间
2.当前在局部名称空间
	局部名称空间  >>>:  全局名称空间  >>>:	内置名称空间
名字的查找顺序默认情况下不能颠倒只能是	局部>>>:全局>>>:内置

名称空间的作用域

1.内置名称空间
	在程序任意位置都可以使用(全局有效)
2.全局名称空间
	在程序任意位置都可以使用(全局有效)
3.局部名称空间
	在各自的局部空间可以使用(局部有效)

局部名称空间复杂情况

1.各自局部名称空间默认情况下不能彼此共享名字
def func1():
    name = 'jason'
    print(age)

def func2():
    age = 18
    print(name)

func1()
func2()

2.特殊情况
# x = 1
#
#
# def func1():
#     x = 2
#     def func2():
#         x = 3
#         def func3():
#             print(x)  特例
#             # x = 4
				 # print(x)
#         func3()
#     func2()
# func1()

name = 'jason'
def func():
    print(name)
    name = 'jasonNB'
func()
函数在定义阶段其实名字的查找顺序就已经固定死了

global与nonlocal关键字

# money = 999

# def func():
#     global money  # 声明 局部名称空间中的money操作的是全局的money
#     money = 1000
#     print(money)

"""
正常情况下 局部名称空间里面出现新的名字会在局部名称空间中存储
但是有时候需要在局部名称空间中修改全局名称空间的名字
"""
# func()
# print(money)

# l1 = [1, 2, 3, 4, 5]
# s = '$jason$'

# def func():
    # global s
    # s = 'jason'
    # res = s.strip('$')
    # l1.append(113123)
    # l1.append(666)

# func()
# print(l1)
"""
局部修改全局名称空间中不可变类型的数据 需要使用关键字global声明
如果是可变类型 则无需关键字声明
"""


def func1():
    x = 1
    l1 = [1,2]
    def func2():
        # nonlocal x
        x = 999
        l1.append(666)
    func2()
    print(x)
    print(l1)
func1()
"""
nonlocal 在内存局部名称空间修改外层局部名称空间中的不可变类型
"""

函数名的多种使用方式

# def func():
#     print('from func')

# 1.函数名也可以被用来多次赋值(函数名与变量名使用一致)
# name = func
# name()
# name1 = name
# name1()

# 2.函数名还可以当做函数的实参
# def index(a):
#     print(a)
#     a()
# index(123)
# name = 'jason'
# index(name)
# index(func)

# 3.函数名还可以当做函数的返回值
# def index():
#     return func
# res = index()
# print(res)
# res()

# 4.函数名还可以当做容器类型里面的数据值
# l1 = [1,2,3,4,func]
# print(l1)
# l1[-1]()


def register():
    print('注册功能')


def login():
    print('登录功能')


def check_account():
    print('查看账户余额')


def withdraw():
    print('体现功能')


def shopping():
    print('购物功能')


def transfer():
    print('转账功能')


# 提前构造功能字典
func_dict = {'1': register,
             '2': login,
             '3': check_account,
             '4': withdraw,
             '5': shopping,
             '6': transfer
             }

while True:
    print("""
    1.注册功能
    2.登录功能
    3.查看余额
    4.提现功能
    5.购物功能
    6.转账功能
    """)
    choice = input('>>>:').strip()
    if choice in func_dict:
        func_name = func_dict.get(choice)
        func_name()
    else:
        print('没有该功能编号')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值