zoukankan      html  css  js  c++  java
  • day10 函数

    函数

    一、函数的定义与调用

    定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

       def 是固定的,不能变,必须是连续的def三个字母,不能分开

       空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

       函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

       括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

    注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

    调用:就是 函数名() 要记得加上括号

    二、函数的返回值

    def 函数():
        return
    
    ret = 函数()
    print(ret)

    没有返回值:
    不写return == return None
    只写一个return == return None
    return的作用:1.返回一个值2.终止一个函数的继续

    返回一个值:

    可以返回任意的数据类型,返回什么就接收什么

    返回多个值:
    用一个变量接收返回值,接收到的是一个元组
    返回值用多个变量接收,那么返回值的个数应该和接收变量的个数完全一致

    三、函数的参数

    复制代码
    def my_len(lst):  # 参数:接收参数,形式参数,形参
        count = 0
        for i in lst:
            count += 1
        return count
    
    
    len_count = my_len([1,2,3])  # 参数:传参数/传参,实际参数,实参
    print(len_count)
    复制代码

    写一个函数,接收参数一个列表或者字符串
    如果这个列表或者字符串的长度大于2就返回True否则返回False

    def foo(x):
        if len(x) > 2:
            return True
        else:
            return False
    print(foo([1,2,3]))

    参数
    形参和实参
    传参数可以传任意的数据类型,并且传什么接收什么

    站在传参数的角度上看问题:一共有两种传参的方式
    第一种:按照位置传参数
    第二种:按照关键字传参数

    def f(para):
        print(para)
    f(1)

    传多个参数:多个参数分别可以使用任意数据类型

    def f2(arg1,arg2):  # 站在接收、形参的角度上:位置参数
        print(arg1)
        print(arg2)
    f2(arg2=1,arg1='abc')  # 按照关键字传参数
    f2('abc',arg2=[1,2])

    按照关键字传参数和按照位置传参数是可以混用的
    但是,首先传按位置的,再传按关键字的
    按照位置传完该接收的参数只能接收一个值,不接收或者重复接收都不行

    形参
    位置参数
    数量必须与实参数量一致 ==> 必须传的参数

    def classmate(name,sex='男'):
        print('姓名:%s,性别:%s' %(name,sex))
    classmate('尤悦')
    classmate('曹超')
    classmate('张建超')
    classmate('晓梅','女')

    默认参数:
    默认参数是可以不传的参数
    在不传参数的情况下可以使用默认的值
    如果传了,就会使用传的值

    魔性的用法:默认参数尽量避免使用可变数据类型

    def func(l = []):
        l.append(1)
        print(l)
    func()  # [1]
    func()  # [1,1]
    func()  # [1,1,1]

     动态参数

    *args:接收所有按照位置传的参数,接收到的是参数组成的元组
    **kwargs:接收所有按照关键字传的参数,接收到的是参数组成的字典

    所有的参数的顺序:位置参数,*args,默认参数,**kwargs

    复制代码
    def func(a,b,c,*args,key = 'key'):  # 在参数前面加个*,这个参数就变成动态参数了
        print(a,b,c)
        print(key)
        print(args)  # 使用时,所有接收过来的参数都被组织成一个元组的形式
    func(2,4,4,5,'abc',[1,3],key='qqxing')
    
    def func(a,*args,key='qqxing',**kwargs):
        print('a:',a)
        print('args:',args)
        print('key:',key)
        print('kwargs:',kwargs)
    # func(5)
    func(5,6,7,key='xiaoxiaosu',b='hahaha',c='hehehe')
    
    def my_sum(*args):
        sum_2 = 0
        for i in args:
            sum_2 += i
        return sum_2
    print(my_sum(1,2,3,2))
    复制代码

    魔性的用法

    在调用函数的时候,可以打散:*l、**dic

    复制代码
    def func(*args):
        print(args)  # (1, 2, 3)
    l = [1,2,3]
    func(*l)  # 按顺序打散
    def func(**kwargs):
        print(kwargs)  # {'b': 2, 'a': 1}
    dic = {'a':1,'b':2}
    func(**dic)
    在调用函数的时候,可以打散:*l、**dic
    复制代码

     四、函数的名字

    第一类对象的概念:
    函数名可以赋值
    可以作为一个数据结构的元素
    可以作为一个函数的参数
    可以作为一个函数的返回值

    复制代码
    def func():
        print('in func')
        return 10
    def func2():
        print('in func2')
        return 20
    print(func)
    f = func
    print(f)
    f()
    l = [func,func2]
    for i in l:
        i()
    
    def func():
        print('in func')
        return 10
    def func2(arg):
        print(arg)
        return arg
    func2(func)
    f = func2(func)
    print(f)
    f()
    复制代码
  • 相关阅读:
    搭建vue开发环境的步骤
    widow怎么结束某端口占用
    替换数据库表中某个代码段中某个字段的某一段字符串sql
    sql优化
    scssmap对象访问
    IntelliJ IDEA 和 webstorm更换主题
    css滚动条样式
    redis set
    【LeetCode】128. 最长连续序列
    第二章 模型评估
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7763179.html
Copyright © 2011-2022 走看看