zoukankan      html  css  js  c++  java
  • 跟着太白老师学python 09day 初识函数

    函数的最主要的目的:封装一个功能

    函数的优点:

    减少代码的复用率, 增加代码的阅读性

    def my_len(arvg):  # arvg 形参  my_len函数名,应该具有代表性,让你一看就明白
        # 函数体
        count = 0
        for i in arvg:
            count += 1
        return count
    print(my_len(s))  # s实参

    return 特点:遇到return结束程序, 返回一些信息

    如果当只有一个返回值时,返回是什么就是什么类型的

    如果当有多个返回值时,将返回一个元组,元组里是需要返回的值

    def fun1():
        a = 1
        b = 2
        c = a + b
        d = 'alex'
        return c, d
    print(fun1())
    >>>(3, 'alex')

    函数传参:

               #实参    函数执行者实际的参数

                             1.位置参数

                             2.关键字参数

                             3. 混合参数

                                       1.位置参数:按照位置一一对应

    def fun2(a, b, c):
        print(a, b, c)
    
    fun2(1, 2, 3)

    >>> 1 2 3

                                       2 关键字参数: 按照所给参数一一对应

    def func3(x, y):
        return x, y
    print(func3(y=1, x=2))

    >>>>(2, 1)

                                      3. 混合参数 由位置参数和关键字参数组成, 关键字参数一定要在位置参数的后面

    def func4(x, y, z):
        return x, y, z
    print(func4(1, z=2, y=3))

                   形参

                             1.位置参数

                             2.默认参数

                                        1 位置参数: 按照位置一一对应

    def func5(x, y):
        return x + y
    
    print(func5(1, 2))

                                         2. 默认参数,如果不传,就默认使用,函数里的默认值,如果传就使用传入的值,默认值设置一般考虑使用量比较多的情况

    def login(name, sex=''):
        f = open('a1.txt', encoding='utf-8', mode='a') #打开文件写入
        f.write('{}|{}
    '.format(name,sex))
        f.close()
    
    while True:
        content = input('请输入姓名和性别,默认为Q,按,分隔, 按Q退出')
        name, sex = content.strip().split(',')
        if name.upper() == 'Q':
            break
        if sex: #如果有值,就传入
            login(name, sex)
        else: #没有值,就默认使用sex='男'
            login(name)

                                         默认参数的注意事项,这里有坑

       

    def func6(x, l1=[]):
        l1.append(x)
        return l1
    tag_1 = func6(1)
    print(tag_1, id(tag_1))
    tag_2 = func6(2)
    print(tag_2, id(tag_2))

    >>>>

    [1] 4612744
    [1, 2] 4612744



    我们可以发现两次执行时的l1可变参数,指向的是同一个内存地址,因此1和2都被添加到同一个l1中,所以在使用默认参数的时候,最好不要使用可变数字类型,不可变数字类型包括数字,字母,布尔值,元组,一般都使用前3个来设置默认参数.

    如果非要是使用,我们需要使用 l = [],重新复制,更换 l 的地址

    def func6(x, l=[]):
        l = []
        l.append(x)
        return l
    tag_1 = func6(1)
    print(tag_1, id(tag_1))
    tag_2 = func6(2)
    print(tag_2, id(tag_2))

     三元运算 是一种判断的简便写法

    def func7(x, y):
        return x if x > y else y
    
    print(func7(1, 2))

                               

  • 相关阅读:
    力扣背包型动态规划
    并查集
    位运算题目
    随机采样题目
    单调栈题目
    前缀和题目
    贪心题目
    堆排序
    python装饰器
    状态机题目
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9481895.html
Copyright © 2011-2022 走看看