美文网首页
(2) python 三大结构和函数

(2) python 三大结构和函数

作者: 小黄不头秃 | 来源:发表于2022-10-16 13:30 被阅读0次

    (一)三大结构

    分支结构和循环结构可以参考我们的入门版代码。
    【1】https://www.jianshu.com/p/8eb0fc8ca8a5

    函数可参考:
    【1】https://www.jianshu.com/p/392b994b3fae

    (1)顺序结构

    顺序结构的意思如字面所示,代码从上往下执行。在我们的一般的代码运行中我们的代码是顺序结构运行的。从上往下运行,也就是说我们如果定义了一个变量,但是在定义变量之前使用了这个变量,根据顺序结构python会报错。

    print(b) # NameError: name 'b' is not defined
    b=0
    
    (2)分支结构

    也就是常说的判断语句,意为:如果……则,如果……则……。
    python 的分支结构为if elif else,其中的判断条件常配合比较运算符使用。如果判断条件为True则执行相应代码块,否则不执行该代码块。在一个条件分支中,如果有一个条件已经满足,其他判断条件均不执行。

    • 等同True的判断条件:

      • True
      • 非空字符串,非空数组,非空字典,非空元组
      • 非0数字
    • 等同False的判断条件:

      • False
      • 空字符串,空数组,空字典,空元组
      • 数字0
    if -1:
        print(123) # 123
    
    if "":
        print(234) # 
    
    if (1):
        print(345) # 345
    
    if True:
        print(456) # 456
    else:
        print("567") # 
    
    
    if -1:
        print(123) # 123
    elif "":
        print(234) # 
    elif (1):
        print(345) # 
    elif True:
        print(456) # 
    else:
        print("上面有满足条件的话,这行代码不执行!") # 
    
    

    列表生成式:一个用于生成列表的特定表达,是一种简洁的写法,用于和for循环结合快速生成列表。
    还有元组生成式、字典生成式都是同样的写法。

    list1 = [i for i in range(10)] # 列表生成式
    print(list1) # [0, 1, 2, 3, 4]
    
    tuple1 = tuple([i for i in list1 if i != 5]) # 元组生成器
    print(tuple1) # (0, 1, 2, 3, 4, 6, 7, 8, 9)
    
    dict1 = {i:j for i,j in enumerate(tuple1)} # 字典生成器
    print(dict1) # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 6, 6: 7, 7: 8, 8: 9}
    
    (3)循环结构

    python中仅提供两种循环结构:

    • for……else……循环,else可省略
    • while……else……循环,else可省略

    range(开始, 结束, 步长)函数用于生成一个序列

    使用break关键字可以跳出当前循环体。
    使用continue关键字可以跳过一次循环,但不能跳出循环体

    for i in range(0,10,1): # 等价于for i in range(10)
        print(i,end=" ") # 0 1 2 3 4 5 6 7 8 9
    
    for j in range(0,10,2):
        print(j,end=" ") # 0 2 4 6 8
    
    for str in ["1","2","3"]:
        print(str,end=" ") # 1 2 3
    
    n=10
    while n:
        n-=1 # n = n-1
        print(n,end=" ") # 9 8 7 6 5 4 3 2 1 0
    else:
        print("执行结束!") # 执行结束!
    
    n2=10
    while n2:
        if n2 == 5:
            break
        n2-=1 # n = n-1
        print(n2,end=" ") # 9 8 7 6 5 
    
    n3=10
    while n3:  # 9 8 7 6 5 (死循环)
        if n3 == 5:
           continue
        n3-=1 # n = n-1
        print(n3,end=" ") # 9 8 7 6 5
    

    (二)函数

    函数时可重复使用的代码段,能提高程序的复用性。

    (1) 函数的定义

    定义函数时,根据需要看是否需要传入参数。函数的返回值根据需要看是否返回参数。

    def print_str(str):
        """打印一个句子加个句号"""
        print(str+".")
    
    def return_str(str):
        """返回一个句子加个句号"""
        return str+"."
    
    str1 = print_str("hello") # hello.
    str2 = return_str("hello") # 
    print(str1, str2) # None hello.
    
    (2)函数的参数

    上一篇中提过

    • 不可变参数:number,str,tuple
    • 可变参数:list,set, dictionary

    在使用函数时我们需要注意传入参数是否可变,否则可能会出现奇怪的现象(其具体原因是因为地址的变化)。

    关键字参数:在定义函数的时候在()里的参数名就是关键字,在调用的时候就能够通过关键字传入参数。优点是不用按照顺序,并且知道自己传入的参数是什么意思。

    默认参数:定义函数时给()里的参数一个默认值,即使不传值,也不会报错。

    不定长参数:暂时不确定参数会有多少个,共有两种方式。

    • 函数名(*x),这里可以传入多个参数,python会将多个参数放到一个元组里面
    • 函数名(**x),这里可以传入多个参数,python会将多个参数放到一个字典里面,
    # 不可变参数 number,str,tuple
    def print_a(a):
        print(id(a), a) # 140719524671840 20
        a = 10
        print(id(a), a) # 140719524671520 10
    
    a = 20
    print(id(a), a) # 140719524671840 20
    print_a(a)
    print(id(a), a) # 140719524671840 20
    
    # 可变参数 list,set, dictionary
    def print_list(list1):
        print(id(list1), list1) # 2739927802696 [1, 2, 3]
        list1[0] = "a"
        print(id(list1), list1) # 2739927802696 ['a', 2, 3]
    
    list1 = [1,2,3]
    print(id(list1), list1) # 2739927802696 [1, 2, 3]
    print_list(list1)
    print(id(list1), list1) # 2739927802696 ['a', 2, 3]
    
    # 关键字参数
    list2 = [2,3,4,5]
    print_list(list1=list1)
    print_list(list1=list2)
    
    # 默认参数
    def sum1(a=0,b=0): # 有默认值
        """这个函数用于求两数之和"""
        print(a+b)
    
    def sum2(a,b): # 无默认值
        """这个函数用于求两数之和"""
        print(a+b)
    
    sum1() # 不报错
    sum1(1,2)
    sum2() # 报错 TypeError: sum2() missing 2 required positional arguments: 'a' and 'b'
    sum2(1,2)
    
    # 不定长参数
    def print_info(*x):
        print(type(x)) # <class 'tuple'>
        for i in x:
            print(i,end=" ")
    print_info("1","2","3") # 1 2 3
    
    def print_info(**x):
        print(type(x)) # <class 'dict'>
        for i in x:
            print(x[i],end=" ")
    print_info(a="1",b="2",c="3") # 1 2 3
    
    (3) lambda 函数

    可以使用lambda函数创建匿名函数,又称之为lambda表达式。函数体是一行操作。可理解为函数的简单版,lambda表达式返回的是函数值,定义的函数返回值是函数体操作后的结果。

    pow = lambda x,n: x**n # 返回一个函数,用于求x的n次方
    print(pow(3,2)) # 9
    
    (4)递归函数

    函数间接或者直接调用函数本身。

    def print_num(i):
        print(i)
        if i == 0:
            return 
        else:
            print_num(i-1)
    
    print_num(5)
    
    # 使用递归函数就阶乘 n!=1×2×3×...×(n-1)×n
    def f(i):
        c=1
        if i>1:
            c = i*f(i-1)
        else:
            i=1
        return c
    f(5)
    
    # 使用递归读取E:\download\tinymce下所有文件夹
    from genericpath import isdir
    import os 
    
    def read_dir(path):
        file_list = os.listdir(path)
        file_list = [os.path.join(path,dir) for dir in file_list if os.path.isdir(os.path.join(path,dir))]
        for route in file_list:
            print(route)
            read_dir(route)
    path = r"E:\download\tinymce"
    read_dir(path)
    
    

    相关文章

      网友评论

          本文标题:(2) python 三大结构和函数

          本文链接:https://www.haomeiwen.com/subject/fvddartx.html