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)
     
     
     
     
     
     
     
  • 相关阅读:
    angular2+ 使用ant.design 的 select组件时(nz-select)下拉框没有脱离文档流,直接撑开页面展示的问题
    element 获取table组件的下标
    调幅调频调相位
    Mongoose基于MongoDB建模并设置关联
    Xavier上TensorRT和Pytorch运行时间对比
    理解vue实例的生命周期和钩子函数
    [Vue]组件——.sync 修饰符实现对prop 进行“双向绑定”(子组件向父组件传值)
    vm.$attrs 【Vue 2.4.0新增inheritAttrs,attrs详解】
    (转)vue v-on修饰符
    Vue中的computed属性
  • 原文地址:https://www.cnblogs.com/changwoo/p/9601873.html
Copyright © 2011-2022 走看看