博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
笔记(九)
阅读量:3934 次
发布时间:2019-05-23

本文共 3100 字,大约阅读时间需要 10 分钟。

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

练习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)   #?'''FalseTrue'''

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

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

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

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

 

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

1.无参数

'''def func():    passfunc()'''

2.有参数

一般参数

'''def func(a,b):   #a,b为形参    passfunc(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关键字参数    passfunc()func(1)func(a=10)'''

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

'''def func(a=10):    passfunc()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原来的默认值'''1211'''
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 4164 7 4152 10 618'''

函数拆装包

def func(**kwargs):  # key word arguments    print(kwargs)#调用func(a=1,b=2,c=3)  #关键字参数  key=valuefunc()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}'''

 

 

 

 

 

 

 

 

转载地址:http://szegn.baihongyu.com/

你可能感兴趣的文章
研发主管的烦恼:周一早晨延迟的项目会议
查看>>
研发主管的烦恼:难以执行的绩效考核
查看>>
精益Scrum(五)
查看>>
精益Scrum(六)
查看>>
精益Scrum(七)
查看>>
软件测试管理—如何写好软件测试计划书
查看>>
解读一名软件测试经理所需要具备的能力
查看>>
有效的软件测试度量
查看>>
软件评测和测试国家现行标准
查看>>
理解测试策略
查看>>
机器学习界大牛林达华推荐的书籍
查看>>
path变量备份
查看>>
Lesson2.2 & 2.3 Maya command reference & quick help
查看>>
lesson 2.4 - Converting MEL Commands to Python
查看>>
Lesson3.2 variables
查看>>
3.4.2 - Operators & 3.4.3 division and truncation
查看>>
3.6 - Maya Commands: setAttr
查看>>
3.7.1 - Strings
查看>>
3.7.4 - Indexing and Slicing Strings
查看>>
3.7.5 - Modifying Strings
查看>>