您的位置:首页 > 编程语言 > Python开发

12.21 python的函数介绍及其应用

2017-12-21 22:13 218 查看
1函数函数是组织好的,可重复使用,用来实现单一或者相关联功能的代码段。Print也是一个函数2 语法:(函数先要定义才能调用)def 函数名(参数列表)       函数体 例如:def test1()                [def表示定义一个函数,test1是函数名]            Print(“hello”)           [这一行表示 test1这个函数的作用也就表test1()       示这个一旦调用这个函数就会输出hello]            test1()                    【最后一行表示调用这个函数也就是前面函数名后面小括号】3 带参数的函数 例如;def add(a,b)(这句话表示定义一个叫add的函数,里面有a和b参数)print(a+b)   (这句话表示这个参数用于计算a+b的合)add(11,10)  (这句话表示调用这个add的函数,a=11,b=10)4 返回值:return  xxx(可以有返回值也可以没有)(可以返回多个值,返回多个值组成一个元组,返回值加上一对中括号,则返回一个列表)带返回值的函数:例如:def add(a,b):   return a+bsum=add(11,22)表示sum等于a+b的合再输出sum就是33函数直接返回一个结果之后再处理这个结果一旦函数中遇到return表示此函数结束,所以return后面写语句是没用的5 python里的参数有 1不可变参数  2关键字参数 3默认参数 4不定长参数。5 关键字参数:关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict例如:**kw和*kw6一个*的参数例如:一个*的参数传的是元组或者列表def calc(*numbers): sum=0for n in numbers:     sum=sum+n*nreturn sumabc=calc(1,2,4,5)print(abc)(既然可以循环这个参数,表示这个参数是一个元组或者列表,因为是这个参数是一个元组或者列表所以传回去的参数也可以是一个列表所以是(1,2,4,5),因为有返回值return所以要给一个值abc=calc。然后再输出abc就是得到的是第一次n等于1也就是0+1*1第二次n=2也就是0+1*1+2+2+4*4+5*5最后是46)总结 *abc表示就是会把传回来的参数都归纳到abc然后形成一个元组,然后就可以遍历这个元组进行计算。一个*的关键字参数传值时可以传一系列的值也可以将一个元组或列表传进去,但是需要在前面*,关键字参数要写在后面,可以不传参7.两个*的参数,一个*的参数传的是元组或者列表,而两个*传的就是字典,例如: def abc(name,age,**kw) print(“name:”,name,”age:”,age,”other:”,kw)abc(“frank”,”37”)(第一句表示建立一个名叫abc的函数,里面有三个参数是name,age,**kw)(第二句话表示当调用这个abc函数的时候会输出name的值,age的值,other的值。第三句话是将frank和37分别传给了name和age,other没有值就是一个空的大括号)这样输出的结果就是name: frank age: 37 other:{}因为第三个参数kw没有传参数所以other是个空的字典。如果要给**kw传参数必须用键值对的方式例如city=“shanghai”这样的方式才可以,后面不管传多少键值对都给**的参数,这种参数为关键字参数,可以不传参可以传多个,如果穿参必须传键值对类型的参数。也可以提前定义一个字典直接传过去。8 默认参数:默认参数必须写在后面,可以不指定参数名,但是顺序要保证,否则要指定参数名(先是默认参数然后是*参数然后是**参数)默认参数一定要用不可变对象,如果是可变对象,程勋运行时会有逻辑错误!例如:Def abc(sex=None):    Print(sex)Abcd(“male”)也可以指定例如:Def abc(uname,sex=None)      Print(sex)Abc(45,sex=“male”)这样表示45传给了uname,male传给了sex如果只传一个参数也可以那就是给了uname一个参数因为sex 默认值None所以不传参数也可以9 组合参数例如:在python中定义函数,可以用必选参数默认参数可变参数关键字参数命名关键字参数,这五种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数def zuhe(a,b,c=0,*abc)   print(a,b,c,abc)def(1,2,3,4,5)(表示1对应a,2对应b,3对应c,abc是一个列表或者元组所以45全部对应abc形成一个新的元组)输出结果就是1 2 3(4,5)10  可变对象与不可变对象可变(mutable)与不可变(immutable)对象在python中,strings,tuples和numbers是不可更改的对象,而list,dict则是可以修改的对象。不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a总结:Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果可变对象,程序运行时会有逻辑错误!要注意定义可变参数和关键字参数的语法:*args是可变参数,args接收的是一个tuple(元组)**kw是关键字参数,kw接受的是一个dict   (字典)下面附上练习题:
# 1、简述普通参数、指定参数、默认参数、动态参数的区别
普通参数:以正确的顺序传入函数,调用时数量必须和声明的一样。
例如:def f1(a,b):
       c=a+b
       print(c)
     f1()
指定参数:参数和函数调用关系密切,函数调用使用使用关键字参数来确定传入的参数值
参数允许函数调用时参数的顺序和声明时不一致。
例如:def f1(a,b):
           c=a+b
            print(c)
       f1(a=4,b=5)
·默认参数:函数进行调用时,如果没有新的参数传入则默认的情况下,就调用默认参数
·动态参数:个函数能处理比当初声明时更多的参数,这些参数叫动态参数
# 2、写函数,计算传入的字符串中数字、字母、空格、以及其他的个数def test2(a):sz=0zm=0kg=0qt=0for i in a:if i.isdigit():sz+=1elif i.isalpha():zm+=1elif i.isspace():kg+=1else:qt+=1print(sz,zm,kg,qt)test2("abc123 45")
# 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。def test3(*b):if len(*b)>5:print("长度大于5")else:print("长度小于5")test3("12")# 4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。def li(*a):for i in tuple(*a):if i=='':print("有空内容")break        else:print("没有空内容")li((1,2,3,4))
# 5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。def ll(abc):if len(abc)>2:del abc[2:]li=[11,22,33,44,55]ll(li)print(li)
#  6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。def test6(*a):tplist=[]for i in range(0,len(list(*a))):if i%2==1:tplist.append(list(*a)[i])return tplistprint(test6([1,2,3,4,5,6,7]))
# 7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。def test7(**a):for key in a.keys():print(key)if len(a[key])>2:a[key]=a[key][0:2]print(a)return atest7(k1="123",k2="234")
# 8.实现百钱买百鸡,for i in range(0,21):for k in range(0,33):z=100-i-kif(z%3==0)and(5*i+3*k+z/3==100):print(i,k,z)
# 9.实现100和尚吃100个馒头y=0for i in range(100):y=100-iif i*3+(1/3)*y==100:print(i,y)

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: