python10

第十天

  • 函数的参数
  • 函数的作用域
  • 函数的嵌套

内容回顾

  1. 面试相关
  • py2/py3区别
  • 1 or 8 and 9
  • 字符串的反转
  • is 和 = 的区别
  • git流程
  • (1,)/1区别
  • 线上的操作系统linux的centos
  • 列举数据类型的方法
  • 深浅拷贝
  • 文件操作,如何读取大文件内容
  • 一行写九九乘法表
  1. 函数的基本结构
def 函数名(参数)
	函数体
    return 返回值(默认为None)
	# return 5, 6, 'alex'
	# 会转换成元组(5, 6, 'alex') 
  1. 参数
  • 按照位置顺数传递参数
  • 参数数据类型不限
  1. 作业
  • 三元运算
  • 斐波那契数列:列表最后两个值之和添加到列表最后

参数

  1. 任意个数、任意类型
  2. 位置传参(调用函数根据参数位置传递参数)
  3. 关键字传参(调用函数根据关键字传递参数)
  4. 位置传参和关键子传参可以混合使用,保证位置参数在关键字参数之前,并且参数总数与函数参数相同
  5. 默认参数
  • 在定义时,设置默认数
  • 可传,传则使用传值;可不传,不传则使用默认值
  1. 万能参数*(参数形成元组)
  • 会传递不同个数的参数,形成元组
def func(*args)
	print(args)	
func(1,2,3)	# (1,2,3)元组
func((1,2,3))	# ((1,2,3),)元组
func(*(1,2,3))	# (1,2,3)元组
  • 只能用位置传参
  • 在*args后的参数只能用关键字传参
  1. 万能参数**(参数形成字典)
  • 会传递不同个数的参数形成字典
  • 只能用关键字参数,关键字为key,值为value
def func(**kwargs)
	print(kwargs)
func(k1=1,k2=2)	# {'k1': 1, 'k2': 2}
func(**{'k1': 1, 'k2': 2})	# {'k1': 1, 'k2': 2}
func(k1={'k1': 1, 'k2': 2},k2=2)	# {'k1': {'k1': 1, 'k2': 2}, 'k2': 2}

  1. 综合应用
def func(*args, **kwargs)
	print(args, kwargs)
func(1,2,3,k1=1,k2=2)	# (1,2,3) {'k1': 1, 'k2': 2}

作用域

  1. 全局变量使用作用域
  • 一个py文件中
  • 先创建,后使用
  • 大写命名
  1. 局部变量使用作用域
  • 一个函数中
  • 先创建,后使用
  • 执行函数
  • 可以使用全局作用域(执行函数前定义的)中的变量
  • 可以使用(执行函数前定义的)函数
  • 优先在本作用域–>再到父级作用域–>最终到全局作用域
  • 子作用域中只能读取和使用方法父级作用域中的变量,不能对父级作用域中的-变量重新赋值(默认)
  • global可以强制在子作用域中对全局作用域变量重新赋值(如果嵌套,仍然给全局变量重新赋值)
  • nonlocal可以强制在子作用域中对父级作用域变量重新赋值

作业

  1. 写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回。
def func(*args):
    summation = 0
    for i in args:
        summation += i
    return summation


print(func(1, 1, 1, 1, 1))	# 5 
  1. 看代码写结果
def func():
    return 1,2,3

val = func()
print( type(val) == tuple )	# True
print( type(val) == list )	# False
  1. 看代码写结果
def func(*args,**kwargs):
    pass

# a. 请将执行函数,并实现让args的值为 (1,2,3,4)
func(1,2,3,4)
# b. 请将执行函数,并实现让args的值为 ([1,2,3,4],[11,22,33])
func([1,2,3,4],[11,22,33])
# c. 请将执行函数,并实现让args的值为 ([11,22],33) 且 kwargs的值为{'k1':'v1','k2':'v2'}
func([11,22],33,k1=v1,k2=v2)
# d. 如执行 func(*{'武沛齐','金鑫','女神'}),请问 args和kwargs的值分别是?
# ('武沛齐','金鑫','女神')
# {}
# e. 如执行 func({'武沛齐','金鑫','女神'},[11,22,33]),请问 args和kwargs的值分别是?
# ({'武沛齐','金鑫','女神'},[11,22,33])
# {}
# f. 如执行 func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'}),请问 args和kwargs的值分别是?
# ('武沛齐','金鑫','女神',[11,22,33])
# {'k1':'栈'}
  1. 看代码写结果
def func(name,age=19,email='123@qq.com'):
    pass

# a. 执行 func('alex') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
'alex'	19	'123@qq.com'
# b. 执行 func('alex',20) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
'alex'	20	'123@qq.com'
# c. 执行 func('alex',20,30) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
'alex'	20	30
# d. 执行 func('alex',email='x@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
'alex'	19	'123@qq.com'
# e. 执行 func('alex',email='x@qq.com',age=99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
'alex'	99	'x@qq.com'
# f. 执行 func(name='alex',99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
报错
# g. 执行 func(name='alex',99,'111@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
报错
  1. 看代码写结果
def func(users,name):
	users.append(name)
    return users

result = func(['武沛齐','李杰'],'alex')
print(result)	# ['武沛齐', '李杰', 'alex']
  1. 看代码写结果
def func(v1):
    return v1* 2

def bar(arg):
    return "%s 是什么玩意?" %(arg,)

val = func('你')
data = bar(val)
print(data)
  1. 看代码写结果
def func(v1):
    return v1* 2

def bar(arg):
    msg = "%s 是什么玩意?" %(arg,)
    print(msg) 

val = func('你')
data = bar(val)
print(data)	# 你你 是什么玩意?
  1. 看代码写结果
v1 = '武沛齐'

def func():
    print(v1)
    
func()	# '武沛齐'
v1 = '老男人'
func()	# '老男人'
  1. 看代码写结果
v1 = '武沛齐'

def func():
    v1 = '景女神'
    def inner():
        print(v1)
    v1 = '肖大侠'
    inner()
func()	#
v1 = '老男人'
func()
  1. 看代码写结果
def func():
    data = 2*2
    return data

new_name = func
val = new_name()
print(val)	# 4

# 注意:函数类似于变量,func代指一块代码的内存地址。
  1. 看代码写结果
def func():
    data = 2*2
    return data

data_list = [func,func,func]
for item in data_list:
    v = item()
    print(v)	# 4	4 4

# 注意:函数类似于变量,func代指一块代码的内存地址。
  1. 看代码写结果
def func(arg):
    arg()
    
def show():
    print('show函数')

func(show)	# show函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值