3. name = input("name:")与2.x中raw_input一回事, 注意接收的变量全部默认为字符串类型。
从控制台接收用户输入,而密文输入import getpass password = getpass.getpass("password:") 这个不能在pycharm中测试成功,而在命令行模式可以成功!
4.格式化输出。
#第一种方式: ,,, name = {_name} age = {_age} ,,, .format(_name=name,_age=age) #第二种方式: ,,, name={0} age={1} ,,, .format(name,age) #第三种方式: "name=%s age=%s"%(name,age)
有必要说一下迭代器/生成器
列表生成式: [ i for i in range(10) ] 在内存中生成列表[0,1,...9],可以根据下标访问其中任意一个元素。如果有几百万个显然不能这样用
生成器: ( i for i in range(10) ) 在内存中是一个地址,不能根据下标访问某元素,只能用gen.next()方法从第一个开始访问
yield关键字把的作用是返回并且记录该中断点。
def gen(i): #有yield关键字,i是长度,从1 开始 n = 1 while n <= i: yield n n += 1 return "done-----" def fuc(i): #没有yield关键字 i += 1 return i print(gen(10)) # <generator object gen at 0x0000000001DF8888> print(gen) # <function gen at 0x00000000005B3E18> print(fuc(10)) # 11
可以发现,有yield的成了生成器对象 genner = gen(10) ↓ 生成器对象有个__next__()方法,调用一次激活一次生成器(第一次激活从头开始,第二次...从yield开始)。
# 第一种调用生成器的方式: whil true + next while True: # 循环到第10个以后就不能next了,因为跳出了while循环yield不了,就抛异常StopIteration try: print(genner.__next__()) except StopIteration as e: print(e.value) break # 第二种调用生成器的方式,用for循环,这里看出gen(10)是一个迭代器了 for i in gen(10): print(i)
#循环10次,i从0开始,自增1,循环完10次后执行else中的内容 for i in range(10): ... else: ...
# 可以设置步长 0 2 4 6 8 for i in range(0,10,2):
... else:
...
# 遍历列表: 1. for i in list1: print ( list1.index(i) , i ) 2. for i,j in enumerate(list1): print ( i , j)
# 遍历字典: 1.for key in info: print( key , info[k]) #推荐使用 2.for k,v in info.items(): print(k,v) #不推荐 效率比第一种慢
三种倒序遍历方法:
# 第一种方法 for x in reversed(array): print x # 第二种方法 for x in range(len(array)-1,-1,-1): print array[x] # 第三种方法 for x in array[::-1]: print x
倒序遍历的用处:
['A','B','C','D','E','F','G','H'] 删除index为2,4,6 ==> ['A','B','D','F','H']
不能pop(2) pop(4) pop(6) 为什么?
del_list = [4,6,2] # 被删的index,无序的 for index in range(len(source)-1,-1,-1): for del_index in del_list: if index == del_index: source.pop(index) # 这样倒序遍历每次都删除了del_list里面index最大的,即source中最靠近尾部的元素
可以看出,实际上是这样的删除步骤, pop(6) pop(4) pop(2)可以直接这样:
del_list.sort(reverse=True) # del_list降序排列 for i in del_list: source.pop(i)
7.判断语句
if a==b and b==c: ... elif d==f: ... else ...
8.break和continue
break用于跳出本层循环,continue用于结束本次循环,开始下一次循环