分支/循环
没有Switch
- if else
 - for
 - while
 
if True:
    xxx
else:
    xxx
while True:
    xxx
else:
    print("退出后执行")
# 主要用来遍历/循环序列或者集合、字典
for x in a:
    # 加上end='',不换行
    # 使用break跳出循环
    # 使用continue跳过当前循环
    print(x,end='')
else:
    print("正常遍历完就执行(包括使用continue),如果使用break打断了是不会执行else的,continue可以")
    
# for range
# 从0开始,一共10个,只会到0到9
for x in range(0,10):
    print(x)
    
# 加上步长
for x in range(0,10,2):
    print(x,end='|') 
    
# 按照指定步长选择数据 
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for x in range(0, len(a), 2):
    print(a[x], end=' | ')
# 等同于
a[0:len(a):2]
# 返回
1 | 3 | 5 | 7 | 9 | [1, 3, 5, 7, 9]
注意:
在循环的内部定义的变量,可以在外部使用
def test():
    c = 123
    for i in range(0, 9):
        c += 1
        a = 'a'
    else:
        a = 'aaa'
    # while c > 114:
    #     c -= 1
    #     a = 'a'
    # else:
    #     a= 'aaa'
    print(c)
    print(a)
test()
# 都能够正确打印出 a 的值
项目结构
- 包(物理上看是一个文件夹)
 - 模块(物理上看是一个.py文件)
 - 类
 - 函数、变量
 
包
若需要将一个普通文件夹变成一个python包,则需要在此文件夹下面添加 init.py文件,且此模块的名字就是包的名字
包的导入: 若需要跨包引用,则需要导入
import 包名.模块名
import b.test as c
import c.test2
或者
from b import test
from b.test import a
from b.test import *
当使用*键导入的时候,不能导入原模块中 __all__定义的数据
函数
参数
- 必须参数
 - 关键字参数,使用参数名称赋值,可以调整顺序,提升可读性
 - 默认参数
    
- 方法参数列表可以同时包含必须和默认参数,但是非默认参数必须在最前面,不能混杂
 - 多个参数若为指定参数名称,按照顺序对应
 
 - 可变参数,接受任意多个参数
    
- 将传递的参数当成了一个元组
 - 若传入一个元组会变成二维元祖,若需要传递后变成元祖,再调用的时候需使用*号
 - 两个*号,会被解析成dict,调用的时候,直接等式调用如:addTest(x=1,y=2,c=3)
 
 
# 必须参数
def add(x,y):
    xxx
# 默认参数
def add(x=1, y=2):
    xxx
# 关键字参数
add(y=3,x=2)
# 可变参数
def demo(*param)
    # 得到的是一个元组类型
    print(type(param))
# 得到字典
def temp(**param):
    # 注意一定要记得用items
    for key, value in param.items():
        print(key, value)
temp(bj='32', xm='23')
也可以直接传入一个字典
p = {'a':1,'b':2}
temp(**p)
返回值:无return返回一个空值 None
多返回值返回的是一个元组
def add(x, y):
    x *= 4
    y *= 3
    return x, y
a, b = add(1, 2)
print(a, b)
序列解包
d = 1,2,3
a,b,c = d
a,b,c = [1,2,3]
a=b=c= 1
解包个数需要相等