(2) python 三大结构和函数

2022-10-16  本文已影响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则执行相应代码块,否则不执行该代码块。在一个条件分支中,如果有一个条件已经满足,其他判断条件均不执行。

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中仅提供两种循环结构:

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

上一篇下一篇

猜你喜欢

热点阅读