一、字符串格式化
①占位符:
%s:万能的,可以打印所有数据类型,一般用于字符串
%d:打印整型
%f:打印浮点数,默认最多打印小数点后6位
②格式化输出:
(1)普通输出
msg='i am %s my age is %d' % ('Hello',18)
print(msg) #i am Hello my age is 18
(2)浮点数输出
%.3f:保留小数点后3位,此处为保留小数点后3位
tpl = "i am %.3f" % 9.45874
print(tpl) #9.458
输出百分比:
%f后加两个%号
tpl = 'percent %.2f %%' % 99.9762
print(tpl) #percent 99.98 %
(3)字符串截取
%.2s:此处为只打印2个字符
tpl = "i am %.2s" % "HelloWorld"
print(tpl) #i am He
(4)字典的打印:
括号内填对应的key值
tpl = "i am %(name)s age %(age)d" % {"name": "alex", "age": 18}
print(tpl) #i am alex age 18
(5)对齐输出
+:右对齐
-:左对齐
msg='i am %+5s my age %d' %("董雨生",18)
print(msg) #i am 董雨生 my age 18
③附加:sep
字符串的拼接
print('root','x','0','0',sep=':') #root:x:0:0
二、format格式化输出
①普通格式输出
(1)通过花括号一一对应
前面的花括号数量不能多于后面括号内的元素,否则会出错
默认一一对应
tpl = "i am {}, age {}, adress {}".format("seven",18,"alex")
print(tpl) #i am seven, age 18, adress alex
tpl = "i am {:s}, age {:d}".format('seven',18) #带有占位符的输出
(2)通过索引输出
通过索引输出,索引不能越界,并且同一索引下的值可以重复被使用
tpl = "i am {2}, age {0}, adress {1}".format("seven",18,"alex")
print(tpl) #i am alex, age seven, adress 18
②字典的输出
(1)字典前加两个*号
通通过key值打印,并且前面同一key值可以在前面多次使用
tpl = "i am {name}, age {age}".format(**{"name": "seven", "age": 18})
print(tpl) #i am seven, age 18
(2)其它样式
tpl = "i am {name}, age {age}, really {name}".format(name="seven", age=18)
③列表的输出
字典前加一个*
tpl = "i am {:s}, age {:d}".format(*["seven", 18])
print(tpl) #i am seven, age 18
③符号输出
b:2进制
o:8进制
x:16进制中的英文小写
X:16进制中的英文大写
%:百分比
tpl = "numbers: {:b},{:o},{:x},{:X}, {:%}".format(15, 15, 15, 15, 15.87623)
print(tpl)
#打印:numbers: 1111,17,f,F, 1587.623000%
三、函数
①函数基本格式:
def:定义函数的关键字
def test(x):
x+=1
return x
同一作用域内,函数重名,后面的函数会覆盖前面的函数,前面的函数失效
②函数返回值:
1.函数返回值类型:可以为任意类型,函数也可以返回(自身函数都可以)
2.函数无返回值时:默认返回None
3.函数返回多个元素时:这些元素会被放在一个元组内,以元组的形式返回,实际上返回的还是一个元素
#例:返回多个元素
def test03():
return 1,2,3,4,'a',['alex'],{'name':'alex'},None
print(test03())
#打印:(1, 2, 3, 4, 'a', ['alex'], {'name': 'alex'}, None)
③函数参数
形参:在调用函数时才开辟内存空间,调用结束后释放内存空间
def calc(x,y):
return x*y
print(calc(1,3)) #3
(1)位置参数:
参数必须一一对应,缺一多以都不可
def test(x,y,z):
pass
test(1,2,3)
(2)关键字参数:
调用时指明参数,顺序可以无序。
调用函数时,关键字参数必须在位置参数右边
def test(x, y, z):
pass
test(y=1,x=3,z=4)
test(1,3,z=2)
test(1,3,y=2) #报错
test(1,y=2,3) #报错
test(z=2,1,3) #报错
(3)默认参数
def handle(x,type='mysql'):
pass
handle('hello')
handle('hello',type='sqlite') #默认参数type会被覆盖
handle('hello','sqlite') #同上
④参数组
(1)*args
参数组中不传入参数时,默认不处理也不能对参数组进行操作。
参数组传入参数时,元素会被放在一个元祖中进行处理
def test(x,*args):
print(args)
#参数组不传入参数时
test(1) #()
def test(x,*args):
print(args) #({'name': 'alex'}, 1, 'Hello')
print(args[0]) #{'name': 'alex'}
#参数组传入参数时
test(1,{'name':'alex'},1,"Hello")
传入列表时:
1.如果列表前不加*,列表被整体放入参数组中
2.列表前不加*,列表元素被拆散一个一个放入参数组中
def test(x,*args):
print(args) #(['x', 'y', 'z'], 1, 2)
print(args[0]) #['x', 'y', 'z']
#列表前不加*号
test(1,['x','y','z'],1,2)
def test(x,*args):
print(args) #('x', 'y', 'z', 1, 2)
print(args[0]) #x
#列表前不加*号
test(1,*['x','y','z'],1,2)
(2)**kwargs
参数组中不传入参数时,默认不处理也不能对参数组进行操作。
参数组传入参数时,元素会被放在一个字典中处理
形参的key值不能重复,切不能与非参数组中的形参名重复
def test(x,**kwargs):
print(x) #1
print(kwargs) #{'y': 2, 'z': 3}
print(kwargs,kwargs.get('y') #2
test(1,y=2,z=3)
==================
test(1,1,2,2,2,2,2,y=2,z=3) #报错
test(1,y=2,z=3,z=3) #报错 :一个参数不能传两个值
实参传入字典
def test(x,**kwargs):
print(x) #1
print(kwargs) #{'y': 2, 'z': 1}
test(1,y=2,**{'z':1})
(3)组成使用
*args参数必须在**kwargs参数前
def test(x,*args,**kwargs):
print(x)
print(args[1])
print(kwargs)
test(1,2,3,y=2,z=3)