12.21 python的函数介绍及其应用

来源:互联网 发布:apache tomcat 6镜像 编辑:程序博客网 时间:2024/06/05 06:43

1函数

函数是组织好的,可重复使用,用来实现单一或者相关联功能的代码段。Print也是一个函数

2 语法:(函数先要定义才能调用)

def 函数名(参数列表)

       函数体 

例如:def test1()                [def表示定义一个函数,test1是函数名]

            Print(“hello”)           [这一行表示 test1这个函数的作用也就表test1()       示这个一旦调用这个函数就会输出hello]

            test1()                    【最后一行表示调用这个函数也就是前面函数名后面小括号】

3 带参数的函数 例如;

def add(a,b)(这句话表示定义一个叫add的函数,里面有ab参数)

print(a+b)   (这句话表示这个参数用于计算a+b的合)

add(11,10)  (这句话表示调用这个add的函数,a=11b=10

4 返回值:return  xxx(可以有返回值也可以没有)

(可以返回多个值,返回多个值组成一个元组,返回值加上一对中括号,则返回一个列表)

带返回值的函数:例如:

def adda,b:

   return a+b

sum=add(11,22)

表示sum等于a+b的合

再输出sum就是33

函数直接返回一个结果之后再处理这个结果

一旦函数中遇到return表示此函数结束,所以return后面写语句是没用的

5 python里的参数有 

1不可变参数  2关键字参数 3默认参数 4不定长参数。

5 关键字参数:

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

例如:**kw*kw


6一个*的参数例如:

一个*的参数传的是元组或者列表

def calc(*numbers): 

sum=0

for n in numbers: 

    sum=sum+n*n

return sum

abc=calc1,2,4,5

printabc

(既然可以循环这个参数,表示这个参数是一个元组或者列表,因为是这个参数是一个元组或者列表所以传回去的参数也可以是一个列表所以是(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的函数,里面有三个参数是nameage**kw)

(第二句话表示当调用这个abc函数的时候会输出name的值,age的值,other的值。

第三句话是将frank37分别传给了nameageother没有值就是一个空的大括号)

这样输出的结果就是

name: frank age: 37 other:{}

因为第三个参数kw没有传参数所以other是个空的字典。

如果要给**kw传参数必须用键值对的方式例如city=shanghai”这样的方式才可以,后面不管传多少键值对都给**的参数,这种参数为关键字参数,可以不传参可以传多个,如果穿参必须传键值对类型的参数。也可以提前定义一个字典直接传过去。

8 默认参数:

默认参数必须写在后面,可以不指定参数名,但是顺序要保证,否则要指定参数名(先是默认参数然后是*参数然后是**参数)

默认参数一定要用不可变对象,如果是可变对象,程勋运行时会有逻辑错误!

例如:

Def abcsex=None:

    Print(sex)

Abcd(“male”)

也可以指定例如:

Def abcunamesex=None

      Printsex

Abc45sex=male”)

这样表示45传给了unamemale传给了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对应a2对应b3对应cabc是一个列表或者元组所以45全部对应abc形成一个新的元组)

输出结果就是1 2 34,5

10  可变对象与不可变对象

可变(mutable)与不可变(immutable)对象

python中,stringstuplesnumbers是不可更改的对象,而listdict则是可以修改的对象。

不可变类型:变量赋值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=0    zm=0    kg=0    qt=0    for i in a:        if i.isdigit():            sz+=1        elif i.isalpha():            zm+=1        elif i.isspace():            kg+=1        else:            qt+=1    print(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-k        if(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-i    if i*3+(1/3)*y==100:        print(i,y)






原创粉丝点击