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))

                               

  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9481895.html
Copyright © 2011-2022 走看看