分支循环
and .. or (历史)
# 如果a < b成立,那么结果为a,否则结果是b a = 3 b = 4 c = (a < b and a or b) 3 # 另外一种写法 a = 3 b = 4 c = 0 c = a if a < b else b c 3 |
if 条件语句
# 条件语句 必须是一个可以用bool值判断的 a = 1 if a == 1: print('a确实是等于1') a确实是等于1 # 输入结果 if a != 1: print('a确实不等于1') # 没有输入结果 if a==1: print('a==1') else: print('a!=1') #屏幕显示-------------------------------- if a==1: print('a==1') else: print('a!=1') a==1 #---------------------------------------- if a == 1: print('a == 1') elif a == 2: print('a == 2') elif a == 3: print('a == 3') else: print('a不等于1 2 3') # 输出结果:a == 1 # elif 用来细化条件判断,else后不加条件语句 |
while 循环语句
while 1: print('欢迎访问dbase.cc') print('希望您能有所收获') # 只要条件是真值,执行代码会反复执行,上面这就是条死循环,结束用ctrl+c summylist = 0 mylist = [1,2,3,4] while mylist: summylist += mylist[0] mylist = mylist[1:] summylist 10 # 说明 sum += mylist[0] # 求和 mylist = mylist[1:] # 切片并重新赋值 # 调测加print验证 summylist = 0 mylist = [1,2,3,4] while mylist: print(mylist) summylist += mylist[0] mylist = mylist[1:] # 输出结果 [1, 2, 3, 4] [2, 3, 4] [3, 4] [4] # while ... else # 如果循环正常结束,那么就会执行else里的语句 mylist = [1,2,3,4] while mylist: print(mylist) mylist = mylist[1:] else: print('循环正常结束了') # 输出结果 [1, 2, 3, 4] [2, 3, 4] [3, 4] [4] 循环正常结束了 |
for 循环语句
# for循环主要用来访问序列和可迭代的数据对象,序列可以是列表、字符串、元组 mystr = 'abc' for var in mystr: print(var) # 输出以下结果 a b c # 说明 ## var是变更名,从序列mystr中一次次取值 dir(str) for var in mystr: var = var.upper() print(var) # 输出以下结果 A B C mylist = [1,2,3,4] for i in mylist: print(i) # 输出以下结果 1 2 3 4 # for ... else # 如果循环正常结束,那么就会执行else里的语句 mylist = [1,2,3,4] for i in mylist: print(i) else: print('循环正常结束') # 输出以下结果 1 2 3 4 循环正常结束 |
break/continue
# break语句用来终止循环语句,如果是用在嵌套循环中,break语句将停止执行最深层次的循环,并开始执行下一行代码 mylist = [1,2,3,4] for var in mylist: if var == 3: break print(var) else: print('循环正常结束') # 输出以下结果 1 2 # continue语句跳出本次循环,跳过这次循环剩下的语句,进行下一轮循环 mylist = [1,2,3,4] for var in mylist: if var == 3: continue print(var) else: print('循环正常结束') # 输出以下结果 1 2 4 循环正常结束 mylist = [1,2,3,4] for var in mylist: for var1 in mylist: if var1 == 3: break print(var1) print('外层循环的var是:',var) # 输出以下结果 1 2 外层循环的var是: 1 1 2 外层循环的var是: 2 1 2 外层循环的var是: 3 1 2 外层循环的var是: 4 mylist = [1,2,3] mylist1 = ['a','b','c'] for var in mylist: print('---------------------') print('外层循环打印:',var) for var1 in mylist1: print('内层循环打印:',var1) # 输出以下结果 --------------------- 外层循环打印: 1 内层循环打印: a 内层循环打印: b 内层循环打印: c --------------------- 外层循环打印: 2 内层循环打印: a 内层循环打印: b 内层循环打印: c --------------------- 外层循环打印: 3 内层循环打印: a 内层循环打印: b 内层循环打印: c # 首先进行外层循环,然后向下会执行到内层循环,内层循环执行完之后,才能继续进行接下来的外层循环 |
深浅拷贝
深拷贝和浅拷贝: python中一切皆对象,像数字,字符串,元祖,如果在内存中存储了这些元素,那么这块内存中的值是不可以被修改的,但是还存在一些可变对象,比如列表和字典,他们所占有的内存空间是可以修改的,有因为python中使用的是引用计数去节省内存。
引用
mylist [1, 2, 3] mylist1 = mylist id(mylist) 140636455243336 id(mylist1) 140636455243336 mylist [1, 2, 3] mylist1 [1, 2, 3] mylist[0] = 'a' mylist ['a', 2, 3] mylist1 ['a', 2, 3] |
拷贝
del mylist1 mylist1 = mylist[:] mylist ['a', 2, 3] mylist1 ['a', 2, 3] mylist[0] = 1 mylist [1, 2, 3] mylist1 ['a', 2, 3] id(mylist) 140636455243336 id(mylist1) 140636455268616 # 切片拷贝,内存地址变化 - 这是浅拷贝 |
浅拷贝
mylist = [1,2,3,['a','b']] del mylist1 mylist1 = mylist[:] mylist[-1][0] = 1 mylist [1, 2, 3, [1, 'b']] mylist1 [1, 2, 3, [1, 'b']] # 当使用切片操作拷贝的时候,虽然可以修改外层列表,不影响其他列表,但是内层子列表被修改的时候,却又受到了影响 del mylist del mylist1 import copy mylist = [1,2,3,[1,2]] mylist1 = copy.copy(mylist) mylist[-1][0] = 'a' mylist [1, 2, 3, ['a', 2]] mylist1 [1, 2, 3, ['a', 2]] mylist[0] = 'a' mylist ['a', 2, 3, ['a', 2]] mylist1 [1, 2, 3, ['a', 2]] # 浅拷贝 不会拷贝数据中的子对象 ## 浅拷贝的方式1: 切片 mylist1 = mylist[:] ## 浅拷贝的方式2: copy.copy() import copy mylist1 = copy.copy(mylist) |
深拷贝
del mylist del mylist1 mylist = [1,2,3,[1,2]] import copy mylist1 = copy.deepcopy(mylist) mylist [1, 2, 3, [1, 2]] mylist1 [1, 2, 3, [1, 2]] mylist[0] = 'a' mylist ['a', 2, 3, [1, 2]] mylist1 [1, 2, 3, [1, 2]] mylist[-1][0] = 'a' mylist ['a', 2, 3, ['a', 2]] mylist1 [1, 2, 3, [1, 2]] # 深拷贝 会拷贝数据中的子对象 ## 深拷贝的方式 import copy copy.deepcopy() |
解决docker容器中文打印乱码问题
print('中文') File "<stdin>", line 0 ^ SyntaxError: 'ascii' codec can’t decode byte 0xe4 in position 7: ordinal not in range(128) # 查看locale设置 locale #------------------------------------ LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL= #------------------------------------ # 查看容器所有语言环境(ubuntu和Centos不一样,下面只列出ubuntu的) locale -a #------------------------------------ C C.UTF-8 POSIX #------------------------------------ # C.UTF-8可以支持中文,只需要把容器编码设置为C.UTF-8即可(centos是en_US.utf8) # 改变locale设置 ## Centos export LANG=en_US.utf8 ## Ubuntu export LANG=C.UTF-8 # 执行打印 print('中文') 中文 # 彻底解决在docker镜像中添加 |