Python概述 pycharm常用快捷键: 作用 快捷键 作用 快捷键 单行注释 Ctrl + / 复制当前光标所在行 Ctrl + D 格式化代码 Ctrl + Alt + L 删除当前光标所在行 Ctrl + X 全局查找 Ctrl + Shift + R 返回至上次浏览的位置 Ctrl + Alt + left/right 快速选中代码 Ctrl + W 替换 Ctrl + R
标识符与关键字: 标识符 标识符就是一个名字,就好像每个人都有自己的名字;主要作用是作为程序中变量、函数、类、模块以及其他对象的调用名称。
Python中标识符的命名要遵守一定的命名规则:
关键字 关键字就是Pytnon内部已经定义好的具有特殊意义的标识符,开发人员不能重复定义。
Python3的关键字可以通过keyword模块的变量kwlist查看:
1 2 3 4 5 6 7 8 import keywordprint (keyword.kwlist)['False' , 'None' , 'True' , '__peg_parser__' ,'and' , 'as' , 'assert' , 'async' , 'await' , 'break' , 'class' , 'continue' , 'def' , 'del' , 'elif' , 'else' , 'except' , 'finally' , 'for' , 'from' , 'global' , 'if' , 'import' , 'in' , 'is' , 'lambda' , 'nonlocal' , 'not' , 'or' , 'pass' , 'raise' , 'return' , 'try' , 'while' , 'with' , 'yield' ] print (help ("if" ))
定义变量 等号表示赋值运算符,两端有空格是开发规范,可以没有。
定义变量示例:
1 2 3 4 5 6 7 8 9 name = "Corazon" age = 35 is_man = True print (name)print (age)print (name, age, is_man)
注释 注释是编写程序时,程序员对一个语句、程序段、函数等的解释或提示,可提高程序代码可读性;
合理的代码注释应该占源代码的1/4左右,注释内容不会被解释器执行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 print ("I am Corazon teacher." ) -- 在程序尾部注释,“ """ 这里就是多行注释 三个引号里面的任何内容不会被解释器执行 """ 或者 ''' 这里就是多行注释 三个引号里面的任何内容不会被解释器执行 '''
python代码编写语法规范 代码语句分隔符号 Python使用分号,用于一条语句的结束标识,如果是一行结尾,可用换行来替代分号。
1 2 3 4 5 6 7 8 Python使用分号,用于一条语句的结束标识,如果是一行结尾,可用换行来替代分号。 print ("I am" );print ("Corazon" )print ("I am" )print ("Corazon" )
代码语句缩进要求 Java、C 语言采用大括号“{}”分隔代码块,而Python 采用冒号“:”和“代码缩进”和来区分代码块之间的层次;对于类、函数、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始;而缩进的结束则表示此代码块的结束。
Python 中可使用空格或者Tab键实现,但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量;
默认情况下,一个 Tab 键就是4 个空格。
1 2 3 4 5 6 i = int (input ("请你输入一个数字: " )) if i > 5 : print ("你输入的数字是" , i, ",大于5," ,sep='' ) else : print ("你输入的数字是" , i, ",小于5," ,sep='' )
代码语法规范补充 Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写;8 代表的是 Python 代码的样式指南。
下面仅给大家列出 PEP 8 中初学者应严格遵守的一些编写规则:
不要在行尾添加分号";"
不要用分号将两条命令放在同一行;
在运算符两侧、函数参数之间以及逗号两侧,都使用空格分隔;
使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行;
另外在用于分隔某些功能的位置也可以空一行。
python中有些特殊语句指令结尾,需要加入:
python数据类型介绍 在python开发过程中,可以将数据类型分为两个大类:
python基本数据类型:字符串 数值型(整型 布尔型) 浮点型
python复合数据类型:元组、列表、字典、集合
数据类型之数字类型介绍 整数类型 python中的整型,即int类型,Python中没有对整型数字大小限制;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 x = 10 print (x) print (type (x)) print (0x11 , 0b101 , 0O12 , 20 )y = 0b10001 print (bin (y),oct (y),int (y),hex (y))10 <class 'int' > 17 5 10 20 0b10001 0o21 17 0x11
浮点类型 在python中小数都属于浮点型(float),有两种表现形式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 f = 3.14 num1 = 3.1415926 + 3.1415926 x = 1 y = "Corazon" f1 = -3.14E2 f2 = 3.14e-2 print ("f:" ,type (f))print (num1)print (3.1415926 +3.1415926 )print ("x:" ,type (x), "y:" ,type (y))print ("f1:" ,type (f1),"f2:" ,type (f2))f: <class 'float' > 6.2831852 6.2831852 x: <class 'int' > y: <class 'str' > f1: <class 'float' > f2: <class 'float' >
布尔类型 布尔型(Bool)是一种特殊数据类型,常用于判断,这种类型只有两种值,即"真"与"假"。
1 2 3 4 5 6 7 8 print (4 == 2 ,5 > 1 )name = "zhangsan" print (name == "lisi" )False True False
1 2 3 4 print (bool ("Cozrzon" ),bool (0 )) print (bool (24 ),bool (0 ))
数据类型间相互转换方法 python内置了进行转换数据类型的函数,常见有int()、float(),示例如下:
1 2 3 4 5 6 7 8 9 10 11 x = 3 y = 3.14 print (x, type (x), y, type (y))print (float (x), type (float (x)), int (y), type (int (y)))3 <class 'int' > 3.14 <class 'float' >3.0 <class 'float' > 3 <class 'int' >
数据类型值字符类型介绍 字符串格式 单行字符串:
1 2 3 4 5 6 print ("hi,Corazon" )s1 = 'hi,Corazon' print (s1)
多行字符串也叫文本字符串,就是三个单引号或者三个双引号圈住的内容,实际上也是字符串;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 s = """ s1 = "hi,boy\nhi,girl" s2 = 'I\'m Corazon' s3 = "D:\\中科人才\\python.exe" s4 = "我是中科人才,\ 我喜欢python" 长字符串中放置单引号或者双引号不会导致解析错误 """ print (s)s1 = "hi,boy hi,girl" s2 = 'I' m Corazon' s3 = "D:\中科人才\python.exe" s4 = "我是中科人才,我喜欢python" 长字符串中放置单引号或者双引号不会导致解析错误
字符串信息转义设置 有些特殊字符信息前面加\ 转义字符会有特殊的含义作用:
转义字符 说明 转义字符 说明 \n 换行符,将光标位置移到下一行开头 \r 回车符,将光标位置移到本行开头 \t 水平制表符,也即 Tab 键,一般相当于四个空格 \b 退格(Backspace),将光标位置移到前一列 \任意字符 转义,例如'
,"
,\
等 行尾\ 不换行,多行编辑一行输出
代码操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 s = "hello,Corazon" print (s[1 ]) print (s[-3 ]) print (s[2 :5 ]) print (s[:5 ]) print (s[6 :]) s = "hello,Corazon" print ("Corazon" in s) print ("Leonidas" in s) s = "hello" + "Corazon" print (s) s = "hello" + ",Corazon!!!" print (s * 2 )print ("*" * 30 ) e z llo hello Corazon True False helloCorazon hello,Corazon!!!hello,Corazon!!! ******************************
字符串内置方法 在对字符串进行操作时,还会存在一些内置的方法函数,完成对字符串信息的特殊需求处理:
方法 作用 示例 输出 upper
大写 "hello".upper()
"HELLO"
lower
小写 "Hello".lower()
"hello"
startswith()
是否以a开头 "Corazon".startswith("a")
True
endswith()
是否以a结尾 "Corazon".endswith("a")
False
isdigit()
是否全数字 '123'.isdigit()
True
isalpha()
是否全字母 'Corazon123'.isalpha()
False
isalnum()
是否全为字母或数字 'Corazon123'.isalnum()
True
strip()
去两边空格 " hi Corazon \n".strip()
"hi Corazon"
join()
多字符串连接 "-".join(["Corazon","eric"])
"Corazon-eric"
split()
分割字符串,默认空格 "Corazon-eric".split("-")
['Corazon', 'eric']
find()
返回指定字符串索引,没有返回-1 "world".find("w")
0 index()
返回指定字符串索引,找不到会报错 "world".index("w")
0 count()
统计指定字符串出现次数 "world".count("l")
1 len(s)
返回字符串长度 len("Hello,Corazon!!!"))
16 replace()
替换old为new 'oldold'.replace('old','new',1)
‘oldold’.replace(‘old’,‘new’)newold
newnew
format()
格式化方法
注意:index()和find()方法只能匹配首个指定字符的索引
复合数据类型 元组数据类型 元组数据类型定义:
元组的元素只能读,不能进行修改(下标不能改 元素不能改 长度不能增加 但整体可以改),通常情况下,元组用于保存无需修改的内容;元组使用小括号表示声明(定义)一个元素数据类型:
1 (element1, element2, element3, ..., elementn)
注意:当创建的元组中只有一个字符串类型的元素时,该元素后面必须要加一个逗号,否则python解释器会将它视为字符串
代码操作示例
1 2 3 4 5 6 l = (1 ,2 ,3 ) print (l,type (l)) pen = ("pear1" , "pear2" , "pear3" ) print (pen)
02 元组数据序列操作:
元组数据信息调取和列表操作基本一致,支持索引和切片操作。
代码操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 l = ("element1" , "element2" , "element3" , "element4" , "element5" , "element6" ) print (l[2 ]) print (l[2 :4 ]) print (l[:4 ]) print ("element2" in l) pen = ("pear1" , "pear2" , "pear3" ) for item in pen: print (item,end=" " ) print ("\n--------分隔符-------" )pen = ("pear1" , "pear2" , "pear3" ,"pear4" ) for item in pen: if item.find("4" ) >= 0 : print (item + "这是第4个梨" ) else : print (item) print ("---------------" )element3 ('element3' , 'element4' ) ('element1' , 'element2' , 'element3' , 'element4' ) True pear1 pear2 pear3 --------分隔符------- pear1 pear2 pear3 pear4这是第4 个梨 ---------------
列表数据类型 列表会将所有元素都放在一对中括号[]里面,相邻元素之间用逗号分隔,具体表现形式:
1 [element1, element2, element3, ..., elementn]
注意:不同于C,java等语言中的数组,python的列表可以存放不同的任意数据类型对象。
1 2 3 4 5 6 7 8 9 l = [123 ,"zkrc" ,True ] print (l,type (l),len (l))for item in l: print (item,type (item)) [123 , 'zkrc' , True ] <class 'list' > 3 123 <class 'int' >zkrc <class 'str' > True <class 'bool' >
1 2 3 4 5 a,b = [1 ,2 ] print (a,b)a,b = [input ("请输入第一个字符: " ),input ("请输入第二个字符: " )] print (a,b)
列表数据信息调取
我们可以使用索引(index)访问列表中的某个元素,也可以使用切片操作访问列表中的一组元素值信息,从而得到的是一个新的子列表。
1 2 3 4 5 6 7 8 9 索引求值 l = [10 ,11 ,12 ,13 ,14 ] print (l[2 ]) print (l[-1 ]) 切片操作 l = [10 ,11 ,12 ,13 ,14 ] print (l[2 :5 ]) print (l[-3 :-1 ])
列表内置方法
方法 作用 示例 结果 append()
向列表追加元素 l.append(4)
l``:[1, 2, 3, 4]
insert()
向列表任意位置添加元素 l.insert(0,100)
l``:[100, 1, 2, 3]
extend(``)
向列表合并一个列表 l.extend([4,5,6])
l``:[1, 2, 3, 4, 5, 6]
pop()
根据索引删除列表元素 l.pop(1)
l``:[1, 3]
remove()
根据元素值删除列表元素 l.remove(1)
l``:[2, 3]
clear()
清空列表元素 l.clear()
l``:[]
sort()
排序(升序) l.sort()
l``:[1,2,3]
reverse()
翻转列表 l.reverse()
l``:[3,2,1]
count()
元素重复的次数2是元素 l.count(2)
返回值:1
index()
查找元素对应索引 l.index(2)
返回值:1
代码操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 l1 = [1 , 2 , 3 ] l1.append(4 ) print (l1) l1.insert(1 , 100 ) print (l1) l2 = [20 , 21 , 22 , 23 ] l1.extend(l2) print (l1) l4 = [10 , 20 , 30 , 40 , 50 ] ret = l4.pop(3 ) print (ret)print (l4) l4.remove(30 ) print (l4) l4.clear() print (l4) l5 = [10 , 20 , 30 , 40 , 50 ] l5[1 ] = 200 print (l5) i = l5.index(40 ) l5[i] = 400 print (l5) l5.reverse() print (l5) print (l5.index(30 )) l5.sort(reverse=True ) print (l5)
字典数据类型 字典是python提供的唯一内键的映射(mapping type)数据类型,python使用{ }创建字典。
由于字典中每个元素都包含键(key)和值(value)两部分,因此在创建字典时,键和值之间使用英文冒号:
分隔。相邻元素之间使用英文逗号,分隔,所有元素放在大括号 { }
中,字典的元素也叫成员,是一个键值对。
1 dictname = {'key1' :'value1' , 'key2' :'value2' , ...}
同一字典中的各个键必须唯一,不能重复。
字典的键值对原本是无序的,但是在python3.6版本之后,字典默认做成有序的了。
代码操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 d = {"01" : "zhangsan" , "02" : "lisi" , "03" : "wangwu" } print (d, type (d))print (d["01" ],d["02" ])d["01" ] = "xiaoX" d["04" ] = "zhaoliu" print (d)print (d)del d["01" ] print (d)del d d = {"01" : "zhangsan" , "02" : "lisi" , "03" : "wangwu" } print ("01" in d)d = {"01" : "zhangsan" , "02" : "lisi" , "03" : "wangwu" } for key in d: print (key, d[key],"||" ,end=" " ) {'01' : 'zhangsan' , '02' : 'lisi' , '03' : 'wangwu' } <class 'dict' > zhangsan lisi {'01' : 'xiaoX' , '02' : 'lisi' , '03' : 'wangwu' , '04' : 'zhaoliu' } {'01' : 'xiaoX' , '02' : 'lisi' , '03' : 'wangwu' , '04' : 'zhaoliu' } {'02' : 'lisi' , '03' : 'wangwu' , '04' : 'zhaoliu' } True 01 zhangsan || 02 lisi || 03 wangwu ||
字典内置的方法
方法 作用 示例 结果 get()
查询字典键值,取不到返回默认值 d.get("name",None)
"zkrc"
setdefault()
查询字典某键的值,取不到给字典设置键值,同时返回设置的值 d.setdefault("age",20)
18
keys()
查询字典中所有的键 d.keys()
['name','age']
values()
查询字典中所有的值 d.values()
['zkrc', 18]
items()
查询字典中所有的键和值 d.items()
[('name','zkrc'),`` ('age', 18)]
pop()
删除字典指定 的键值对 d.pop(
“age”)
{'name':'zkrc'}
popitem()
删除字典最后 的键值对 d.popitem()
{'name':'zkrc'}
clear()
清空 字典d.clear()
{}
update()
更新字典
代码操作示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 dic = {"name" : "zkrc" , "age" : 22 , "sex" : "male" } name = dic.get("name" ) sex = dic.get("sex" , "female" ) print (name)print (sex)print (dic.keys()) print (dic.values()) print (dic.items()) print (dic.setdefault("name" ))print (dic.setdefault("height" , "180cm" )) print (dic) sex = dic.pop("sex" ) print (sex) print (dic) dic.popitem() print (dic) dic.clear() add_dic = {"height" : "180cm" , "weight" : "60kg" } dic.update(add_dic) print (dic) update_dic = {"age" : 33 , "height" : "180cm" , "weight" : "60kg" } dic.update(update_dic) print (dic) dic = {"name" : "zkrc" , "age" : 22 , "sex" : "male" } for key in dic: print (key, dic.get(key)) for i in dic.items(): print (i[0 ],i[1 ])
集合数据类型 Python 中的集合,和数学中的集合概念一样,由不同可hash的不重复的元素组成的集合。
Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔。
同一集合中,只能存储不可变的数据类型,包括整形、浮点型、字符串、元组,无法存储列表、字典、集合这些可变的数据类型,否则 Python 解释器会抛出 TypeError错误。
说明:由于集合中的元素是无序的,因此无法向列表那样使用下标访问元素,访问集合元素最常用的方法是使用循环结构;
集合内置方法
方法 作用 示例 结果 add()
向集合添加元素 a.add(4)
{1, 2, 3, 4}
update()
向集合更新一个集合 a.update({3,4,5})
{1, 3, 4, 5}
remove()
删除集合中的元素 a.remove(2)
{1, 3}
discard()
删除集合中的元素 a.discard(2)
{1, 3}
pop()
删除集合第一个元素 a.pop()
{2,3}
clear()
清空集合 a.clear()
{}
intersection()
返回两个集合的交集 a.intersection(b)
{3}
difference()
返回两个集合的差集 a.difference(b)
b.difference(a)
{1,2}
{4,5}
symmetric_difference()
返回两个集合的对称差集 a.symmetric_difference(b)
{1, 2, 4, 5}
union()
返回两个集合的并集 a.union(b)
{1, 2, 3, 4, 5}
运算符号介绍 数运算符说明 运算符 说明 实例 结果 + 加 1+1 2 - 减 1-1 0 * 乘 1*3 3 / 除法 4/2 2 // 整除 7 // 2 3 % 取余,求模,即返回除法的余数 7 % 2 1 ** 幂运算/次方运算 2 ** 4 16 | 或 5|3 7 & 与 5&3 1 ^ 异或 5^3 6
Tips:事实上,a | b=(1 & b)+(a ^ b)
位运算符说明 运算符 说 明 用法举例 等价形式 = 赋值 x = y x = y += 加赋值 x += y x = x + y -= 减赋值 x -= y x = x - y *= 乘赋值 x *= y x = x * y /= 除赋值 x /= y x = x / y %= 取余数赋值 x %= y x = x % y **= 幂赋值 x **= y x = x ** y //= 取整数赋值 x //= y x = x // y &= 按位与赋值 x &= y x = x & y |= 按位或赋值 x |= y x = x | y ^= 按位异或赋值 x ^= y x = x ^ y <<= 左移赋值 x «= y x = x << y, y 指左移位数 >>= 右移赋值 x »= y x = x >> y, y 指右移位数
比较运算符说明 比较运算符 说明 > 大于 < 小于 == 等于 >= 大于等于(等价于数学中的 ≥) <= 小于等于(等价于数学中的 ≤) != 不等于(等价于数学中的 ≠) is 判断两个变量所引用的对象是否相同 is not 判断两个变量所引用的对象是否不相同
逻辑运算符说明 逻辑运算符 含义 基本格式 说明 and 与运算 x and y 当x和y都为真时结果才为真。 or 或运算 x or y 当x和y都为假时结果才是假。 not 非运算 not y 对x的结果取相反的结果。
成员运算符说明 in和not in用于测试给定数据是否存在于序列(如列表、字符串)中:
in作用是,如果指定字符在字符串中,则返回True,否则返回False。not in的作用刚好相反。
编写运算符应用示例代码:
1 2 3 4 5 6 7 x="zkrc" y="b" print (y in x)print (y not in x)False True
输入输出应用 输入输出函数说明 print()函数 print()函数用于打印内容或变量等输出,是python中最最用的函数。
函数语法格式:
1 print (value1, ..., sep=' ' , end='\n' , file=sys.stdout,flush=False )
函数参数信息:
序号 函数参数 解释说明 01 value 打印的对象,之间用逗号分隔 02 sep 打印的两个值之间的分隔符,默认是空格 03 end 打印输出以什么结尾,默认是换行符\n 04 file 输出的文件对象,默认是sys.stdout,标准输出 05 flush 表示要强制冲洗流(忽略)
print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表:
符号 类型 示例 %s
字符串 "Hello %s" % "World"
%d
整数 "Age: %d" % 25
%f
、%F
浮点数 "Price: %.2f" % 99.876
→ 99.88
%x
十六进制整数 "Hex: %x" % 255
→ ff
%%
百分号本身 "Discount: 10%%"
代码操作示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 name = "Corazon" sex = "Male" age = 24 print (name, sex, sep=":" , end=" " )print (age) print ("你的名字是:" , name, "你的性别:" , sex, "你的年龄" , age) print ("你的名字是:" , name, " 你的性别:" , sex, " 你的年龄" , age, sep='' ) info = "你的名字是:" + name print (info) print ("你的名字是{0},你的性别:{1},你的年龄:{2}" .format (name, sex, age)) print ("你的名字是%s,你的性别:%s,你的年龄:%s" % (name, sex, age))
input函数是用来接收用户输入的数据,会返回一个字符串类型的数据。如果想要得到其他类型的数据进行强制类型转化。代码操作示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 name = input ("请输入您的姓名:" ) year = int (input ("请输入您的出生年:" )) month = int (input ("请输入您的出生月:" )) day = int (input ("请输入您的出生日:" )) print ("您好%s,您的出生日期为:%d-%02d-%02d" % (name,year, month, day))请输入您的姓名:Corazon 请输入您的出生年:2000 请输入您的出生月:6 请输入您的出生日:8 您好Corazon,您的出生日期为:2000 -06-08
格式化输出 话不多说
%
格式化(传统方法)1 2 3 name = "Alice" age = 30 print ("Name: %s, Age: %d" % (name, age))
高级控制:
1 2 3 4 5 6 7 8 print ("[%10s]" % "left" ) print ("[%-10s]" % "right" ) print ("π: %.03f" % 3.14159 ) print ("a: %010.03f" % 1.23456 ) print ("a: %.010f" % 1.23456 )
Python 2.6+版本支持str.format()` 方法:
1 2 3 print ("Name: {0}, Age: {1}" .format ("Bob" , 40 ))print ("Name: {name}, Age: {age}" .format (name="Bob" , age=40 ))num=input ("你还有{0}次机会,\n请输入一个1到20的整数:" .format (5 -count))
核心功能:
位置参数 "{0} + {1} = {2}".format(1, 2, 3)
→ 1 + 2 = 3
关键字参数 "User: {username}".format(username="admin")
混合使用 "{0} {last}".format("John", last="Doe")
格式化规范(:
后定义格式): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 print ("π: {:.3f}" .format (3.14159 )) print ("Hex: {:x}" .format (255 )) print ("[{:>10}]" .format ("right" )) print ("[{:^10}]" .format ("center" )) print ("Balance: {:+d}" .format (100 )) print ("{:,}" .format (1000000 )) print ("Ratio: {:.2%}" .format (0.25 ))
f-strings
Python 3.6+,推荐。在渗透测试Python脚本中经常使用f-strings
方式构建PayLoad
1 2 3 name = "Corazon" age = 35 print (f"Name: {name} , Age: {age} " )
高级特性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 print (f"Sum: {5 + 3 } " ) print (f"Uppercase: {'hello' .upper()} " ) pi = 3.14159 print (f"π: {pi:.3 f} " ) print (f"Hex: {255 :x} , int: {0b11111111 :d} , Oct: {255 :o} , Bin: {255 :b} " ) print (f"[{'left' :<10 } ]" ) print (f"[{'right' :>10 } ]" ) print (f"[{'center' :^10 } ]" ) print (f"[{'pad' :*>10 } ]" ) cookies = {'TrackingId' : f"{Tracking_id} ' and ascii(substr((select password from {tablename} where username='{username} '),{password_index} ,1)) > {ascii_mid} --+;" } from datetime import datetimenow = datetime.now() print (now) print (f"Now: {now:%Y-%m-%d} " ) name = "Corazon" print (fr"Raw: \n {name} " ) print (f"Raw: \\n {name} " )
模板字符串(string.Template
) string.Template
是 Python 标准库中提供的一种安全、简单的字符串替换机制,特别适合处理用户提供的模板或需要防止注入攻击的场景。
基本用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 from string import Templatet = Template("Hello, $name! Today is $day." ) result = t.substitute(name="Alice" , day="Monday" ) print (result) result = t.safe_substitute(name="Bob" ) print (result) from string import Templatet = Template("Welcome, $user!" ) print (t.substitute(user="Admin" )) t = Template("Total: ${amount}USD" ) print (t.substitute(amount=100 )) data = {"name" : "Corazon" , "item" : "book" , "price" : 29.99 } t = Template("$name bought a $item for $$$price" ) print (t.substitute(data)) t = Template("Cost: $$ $amount" ) print (t.substitute(amount=50 )) t = Template("Value: $val" ) print (t.substitute(val="$100" ))
高级用法 1 2 3 4 5 6 7 8 9 10 11 12 class MyTemplate (Template ): delimiter = '#' idpattern = r'[a-z]+' t = MyTemplate("Hello, #name! Your code is #code" ) print (t.substitute(name="Corazon" , code="XYZ123" )) class SafeTemplate (Template ): idpattern = r'[_a-z][_a-z0-9]*' t = SafeTemplate("$user_name: $score" ) print (t.substitute(user_name="Eve" , score=95 ))
安全特性 string.Template
的主要安全优势:
不执行表达式 :不会像 f-strings 那样执行任意代码
无格式化功能 :不能访问对象属性或执行方法
简单替换 :只进行直接的字符串替换
1 2 3 4 user_input = "${os.system('rm -rf /')}" t = Template("User data: $data" ) print (t.safe_substitute(data=user_input))
实际应用场景 邮件模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 email_template = Template(""" Dear $name, Your order #$order_id has been shipped. Tracking number: $tracking_num Regards, $company """ )data = { "name" : "Alice" , "order_id" : "12345" , "tracking_num" : "ZYX987" , "company" : "ACME Corp" } print (email_template.substitute(data))
2. 配置文件模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 config_template = Template(""" [DATABASE] host = $db_host port = $db_port user = $db_user password = $db_pass """ )db_config = { "db_host" : "localhost" , "db_port" : 5432 , "db_user" : "admin" , "db_pass" : "secure123" } print(config_template.substitute(db_config))
3. 多语言支持
1 2 3 4 5 6 7 8 9 10 templates = { "en" : Template("Hello, $name !" ), "es" : Template("¡Hola, $name !" ), "fr" : Template("Bonjour, $name !" ) } def greet(name, lang ="en" ): return templates[lang].substitute(name =name) print (greet("Pierre" , "fr" )) # Bonjour, Pierre!
其他方法 (1) 字符串拼接
1 print ("Name: " + name + ", Age: " + str (age))
(2) str.join()
处理列表
1 2 words = ["Python" , "is" , "powerful" ] print (" " .join(words))
总结对比 方法 易读性 灵活性 安全性 版本要求 %
格式化低 中 低 所有版本 str.format()
高 高 中 Python 2.6+ f-strings 极高 极高 中 Python 3.6+ string.Template
中 低 高 所有版本
流程控制语句 python流程控制语句介绍
软件程序是由语句构成,而流程控制语句是用来控制程序中每条语句执行顺序的语句;可以通过控制语句实现更丰富的逻辑以及更强大的功能;几乎所有编程语言都有流程控制语句,功能也都基本相似,其流程控制方式有:
最简单最常用的就是顺序结构,即语句从上至下逐一执行:
1 2 print ("I am zkrc." )print ("I like python." )
流程控制分支语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 if 表达式: 代码块 if 表达式: 代码块1 else : 代码块2 代码块1 elif 表达式2 : 代码块2 ...更多elif 语句 else : 代码块 n
双分支语句中的pass用法:
空语句,不做任何事务处理,一般用作占位
保证格式完整
保证语义完整
一些高阶用法:
1 2 3 num1, num2 = 1 , 2 print (num1 if num1 > num2 else num2)
流程控制循环语句 Python语言中的循环语句支持 while循环(条件循环)和for循环(遍历循环)
流程控制循环语句-while 循环语句语法格式:
循环语句应用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 while True : print ("ok" ) import timewhile True : print ("boss" ) time.sleep(0.5 ) count = 1 while count <= 10 : print (count) count+=1 print ("end" )
流程控制循环语句-for 循环语句语法格式:
1 2 for 迭代变量 in 字符串|列表|元组|字典|集合: 代码块
循环语句应用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for i in "zkrc" : print (i) for item in ["张三" ,'李四' ,"王五" ]: print (item) for i in range (5 ): print (i) for i in range (2 ,11 ,2 ):print (i)结果: 前闭后开 不包含11 2 4 6 8 10
流程控制循环嵌套 1 2 3 4 5 6 7 8 9 10 for i in range (5 ): for j in range (5 ): print (" *" ,end="" ) print ("" ) for i in range (1 ,5 ): for j in range (i): print (" *" ,end="" ) print ("" )
循环控制语句说明 如果在某一时刻(在不满足结束条件的情况下)想提前结束循环,可以使用break或continue关键字;
循环控制语句-break
当break关键字用于for循环时,会终止循环而执行整个循环语句后面的代码信息;break 退出的是循环 exit() 或者quit() 退出的是脚本
1 2 3 4 5 for i in range (1 ,6 ): if i == 3 : break print (i) print ("end" )
循环控制语句-continue
不同于break退出整个循环,continue指的退出当次循环,但会继续在循环结构中,完成后续的循环操作;
1 2 3 4 5 for i in range (1 ,6 ): if i == 3 : continue print (i) print ("end" )
流程循环语句练习
循环控制语句练习-01:猜水果价格小游戏
一个水果摊,老板卖水果,你去猜水果价格,当你说出价格后,老板会告诉你大小;
如果猜高了,就会告诉你猜高了;
如果猜低了,就告诉你你猜低了;
直到猜对为止,并在猜对后,会输出一共猜了几次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import randomwhile True : rannum = random.randint(1 ,20 ) print ("请出价猜水果价格:答案是1到20之间整数" ) count = 0 while count <=5 : num = input ("你还有{0}次机会,\n请输入一个1到20的整数: " .format (5 -count)) if num.isdigit(): num =int (num) if num == rannum: print ("恭喜你,答对了!" ) break if num > rannum: print ("猜的有点大" ) if num < rannum: print ("猜的有点小" ) count = count +1 else : print ("请输入一个整数" ) if count == 5 : print ("给了你" ,count,"次机会都没答对,正确的答案是:" ,rannum,sep='' ) break print ("怎么样,这游戏好玩吧?" ) print ("按任意键结束游戏,按空格键继续游戏:" ) select = input ("请输入你的选择:" ) if select != " " : break
编程函数 函数定义语法格式:
1 2 def 函数名 (var1,var2...varn ): 操作指令信息
本文参考: