zoukankan      html  css  js  c++  java
  • Function

    函数初识:
    s = '12345'
    def my_len():
        i = 0
        for k in s:
            i += 1
        print(i)
    my_len()
    my_len() #重复调用
    问题:
        1.只能打印s的长度
        2.通过i = my_len() 返回none,发现函数没有返回长度,只是单纯的打印
    解决:增加返回值
    s = '12345'
    def my_len():
        i = 0
        for k in s:
            i += 1
        return i   #给苹果
    my_len()
    length = my_len()   #要苹果
    print(length)
    返回值的三种情况:
        1.没有返回值
            -不写return 程序会在最后默认return None
            -只写return,程序遇到return就不会运行后面的程序了。结束一个函数的继续。
            -写return None和只写return功能一样
        2.返回一个值
            -可以返回任何数据类型
            -只要返回了就可以接受到
            -如果在一个程序中有多个return,那么只执行一个
        3.返回多个值
            -有多少个返回值用多少个变量接收,不能多也不能少。return 1,2,3   a,b,c = fun()
            -用一个变量接收多个返回值,会返回一个元组 
    元组、list、dict是可以解包的:
        1.a,b,c = (1,2,3)
        2.a,b,c = [1,2,3]
        3.a,b,c = {1:1,2:2,3:3}
    参数:
        1.ret = my_len(s) #传递参数;传参;实际参数;实参
        2.def my_len(s): #形式参数,形参;接收参数
        3.两个函数可以互相调用
    def f1(i):
        for k in i:
            print(k)
    def f2(i):
        f1(i)
        for y in i:
            print(k)
    f2([1,2,3,4]) #函数的嵌套调用
    参数:
        1.一个参数
        2.两个参数 def my_len(a,b)
    站在参数的角度上:
        1.按照位置传参
        2.按照关键字传参
        3.混着用可以:但是必须先按照位置传参,再按照关键字传参
        4.不能给同一个变量传多个值
    站在形参的角度上:
        1.位置参数:必须传,而且有几个参数就传几个值
        2.默认参数:可以不传,如果不传就是默认的参数,如果传了就用传了
        3.动态参数:args是习惯,可以无限多的增加参数,但是*args不能收到关键字传递的参数,*args必须再*kwargs之前
        4.顺序:-位置参数,-*args,-默认参数, -**kwargs
    动态参数1:可以接收任意多个参数
    def sum(*args): #args只是一个变量名,*不可变
        print(args) #元组用for循环调用
    sum(1,2)
    sum(1,2,3)
    sum(1,2,,3,4) #接收的是按照位置传参的值,组织成一个元组
    动态参数2:可以传入无限多个关键词参数
    def func(**kwargs):
        print(kwargs) 
    fun(a=1,b=2,c=3)
    fun(a=1,b=2)
    fun(a=1) #接收的是按照关键字传参的值,组织成一个字典
    两个动态参数结合,可以接收所有的值
    def func(*args,**kwargs): 
        print(args,kwargs)
    func(1,2,3,a=1,b=3) #先传位置参数,再传关键字参数
    def func(a,b,*args,sex='man',**kwargs):
        print(a,b,args,sex='man',kwargs)
    func(1,3,4,sex='man',a=1,b=2)
    def func(*args): #站在形参的角度上,给变量加上*,就是组合所有传来的值
        print(args)
    a = [1,2,3,4,5]
    func(*a)
    #效果等于func(1,2,3,4,5)
    #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散
    def func(**kwargs):
        print(kwargs)
    d = {'a':1,'b':2}
    func(**d)
    效果等于func(a=1,b=2)
    函数的注释:
    def func():
        '''
        这个函数实现了什么功能    
        参数1:
        参数2:
        return:是字符串或者是列表的长度
        '''
        pass
    函数的陷阱:
        如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源。
    def qqxing(i=[]):
        i.append(i)
    qqxing()
    qqxing([1])
    qqxing()
     
    def qqxing(k,a={}):
        a[k] = 'v'
        print(a)
    qqxing(1)
    qqxing(2)
    qqxing(3)
     
     
     
     
     
     
     
  • 相关阅读:
    DOM getElementById
    百度之星2014
    游艇租借
    2014年acm亚洲区域赛·鞍山站
    UVALive 4255 Guess
    UVA 10054 The Necklace
    UVA 10047 The Monocycle
    UVA 11624 Fire!
    第九届黑龙江省赛
    剑指offer系列31-----二叉树的下一个节点
  • 原文地址:https://www.cnblogs.com/changwoo/p/9601873.html
Copyright © 2011-2022 走看看