笔记(九)

最好函数内部变量声明为全局,不然易报错

练习3:

封装一个求最大值函数

def max(iterable):   #iterable 可迭代的
    max = iterable[0]
    for i in iterable:
        if i>max:
            max=i
    print('最大值是:',max)
#调用,测试是否完成预定功能
#封装好后,谁用谁直接调函数
list1 = [4,1,8,4,6,3,3]
max(list1)
tuple1=(3,9,0,1,3,8,11)
max(tuple1)
'''
最大值是: 8
最大值是: 11
'''

上面代码要求输入是可迭代的,如何判断是否可迭代?

type只能查看是什么类型,不能判断是不是什么类型,此处指判断是否可迭代

print(type(tuple1)=='tuple')   
print(type(tuple1)==tuple)   #?
'''
False
True
'''

判断是不是什么类型用函数  isinstance(object,classinfo)

object:实例对象  classinfo:可以是直接或间接类名、基本类型或者由它们组成的元组。

print(isinstance(tuple1,tuple))
'''
True
'''

tip:按住Ctrl,鼠标点击函数,就能看到函数源码   //   ctrl+/快速注释所选内容

 

函数的参数:普通参数,可变参数(*args(),**kwargs{}),关键字参数

1.无参数

'''
def func():
    pass
func()
'''

2.有参数

一般参数

'''
def func(a,b):   #a,b为形参
    pass
func(1,2)        #1,2为实参
'''

出现阴影要小心,说明有错误,形参和实参个数要一致

TypeError: add() missing 1 required positional argument: 'b'

可变参数    参数个数可以改变

 

不报阴影说明能正常运行

上图中,*号相当于装包,底层提前把装包容器(元组)准备好了

args是arguments缩写,表示位置参数

def add(*args):  #个数随便传   可变参数
    sum=0
    if len(args)>0:
        for i in args:
            sum+=i
        print('累加和是:',sum)
    else:
        print('没有元素可以计算',sum)
add()
add(1,2,3,4)
add(1,)    #一个元素的元组要加逗号,不然括号会当成运算符
'''
没有元素可以计算 0
累加和是: 10
累加和是: 1
'''

参数包含可变参数和不可变参数的情况:先放固定参数,再放可变参数

def add(name,*args):  #name,*args='飞飞',1,2,3,4
    sum=0
    if len(args)>0:
        for i in args:
            sum+=i
        print('%s的累加和是:%s'%(name,sum))
    else:
        print('没有元素可以计算',sum)
        #调用
add('飞飞',1,2,3,4)
'''
飞飞累加和是:10
'''

万能形式

'''
​​​​def func(*args,**kwargs): #args单个元素 kwargs关键字参数
    pass
func()
func(1)
func(a=10)
'''

默认值参数   key=value,相当于一个默认值。给值则覆盖

'''
def func(a=10):
    pass
func()
func(100)
'''

关键字参数  指明给谁赋值

def add(a,b=10): #b为关键字参数,此时b为默认值
    result = a+b
    print(result)
#调用
add(2)
add(4,7)  #a=4,b=7  7覆盖b原来的默认值

'''
12
11
'''
def add(a,b=10,c=4):
    print(a,b,c)
    result = a+b+c
    print(result)
#调用
add(2)
add(4,7)
#给c赋值而不是给b赋值
add(2,c=6)
'''
2 10 4
16
4 7 4
15
2 10 6
18
'''

函数拆装包

def func(**kwargs):  # key word arguments
    print(kwargs)
#调用
func(a=1,b=2,c=3)  #关键字参数  key=value
func()
func(a=1)
dict1={'a':1,'b':2,'c':3}  #字典key要是字符串类型
func(**dict1)   #传递实参用到**,会把字典拆包成关键字(a=1,...),传到**kwargs,又进行了装包变成字典
'''
{'a': 1, 'b': 2, 'c': 3}
{}
{'a': 1}
{'a': 1, 'b': 2, 'c': 3}
'''

**kwargs说明,只要外面给函数送值,送的值必须是关键字(key=value),不一定要取kwargs这个名,**是关键

*默认准备元组,**默认准备字典

def bb(a,b,*c,**d):
    print(a,b,c,d)
bb(1,2)
bb(1,2,3,4)
bb(1,2,x=100,y=200)
#bb(1,2,x=100,5,6)  1给a,2给b,c没有,x=100,5,6给了d,不符合要求
'''
1 2 () {}
1 2 (3, 4) {}
1 2 () {'x': 100, 'y': 200}
'''

位置参数要在关键字参数之前

def func(name,*courses):
    if len(courses)>0:
        for i in courses:
            print('{}学过了{}'.format(name,i))
    else:
        print('没有学过任何编程知识')
courses=['html','sql','python']
func('坤坤',courses)
func('坤坤',*courses)
'''
坤坤学过了['html', 'sql', 'python']
坤坤学过了html
坤坤学过了sql
坤坤学过了python
'''

作业:

def func(a,*args):
    print(a,args)
func(2,[1,2,3,4],5,'hello')
func(3,4,(4,5,7),9)
'''
2 ([1, 2, 3, 4], 5, 'hello')
3 (4, (4, 5, 7), 9)
'''
def func(a,b=10,c=3,**kwargs):
    print(a,b,c,kwargs)
#func(3,4,7,a=9,b=2)  TypeError: func() got multiple values for argument 'a'
#改正
func(3,4,7,x=9,y=2)
func(3,c=5,b=3,x=9,y=2)  #关键字赋值,顺序没有要求
'''
3 4 7 {'x': 9, 'y': 2}
3 3 5 {'x': 9, 'y': 2}
'''

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值