前面涉及数据类型和变量的总结
变量的作用是用来记录状态变化,变量名:“门牌号”,变量值:内存中开辟一个“小房间“”,存在里面。
数据类型:字符串、数字、列表、元组、字典。
可变:列表、字典
不可变(重新赋值,用ID号查看发现变了):字符串,数字,元组
访问顺序:
直接访问:数字
顺序访问:字符串、列表、元组
映射:字典(占内存比列表高,但查询速度更快)
存放元素个数:
容器类型:列表、元组、字典
原子:数字、字符串
集合
由不同元素组成;无序;只能存放不可变类型。
s={1,2,3,4,5,6} #和字典一样都是花括号,但元素不一样
dic={key:value,...}
s=set('hello')
print(s)
输出
{'o','h','l','e'} #不止这一种结果
s=set(['alex','alex','sb'])
print(s)
输出
{‘sb’,'alex'}
内置方法
- add(将括号内的不可变数据整体放入集合中)
- set(清空集合,输出set())
- copy(复制某集合,产生新集合)
- pop(随机删除集合中某元素)
- remove(指定删除某元素,括号内写元素,元素不存在会报错)
- discard(指定删除某元素,括号内写元素,元素不存在不会报错)
补充
set本身是可变的,但用s=frozenset('hello')定义的set是不可变的。
简单去重:
name=['alex','alex','wupeiqi']
name=list(set(name))
字符串格式化
msg='I'+'Like'+'Music' #加号尽量不要用,会开辟新的内存空间,效率非常低
#与之相比,下面这样做就比较合理
msg='I am %s my hobby is %s'%('Chen Yuan','music') #其实%s什么都能接收,比如列表,数字...,但尽量用专门的符号,否则降低可读性;%.3s截取字符串前三位。 %d只能接收数字 %f浮点数(%.2f四舍五入小数点后两位)。 打印百分号%%。
print(msg)
输出
I am Chen Yuan my hobby is music
tp1='i am %(name)s age %(age)d'%{'name':'alex','age':18} #通过键
print('root','x','0','0',sep=':')
输出
root:x:0:0
常用格式化
tp1='i am {},age {},hobby {}'.format('Alex',18,'play') #不一一对应则报错
tp1='i am {2},age {1},hobby {0}'.format('play',18,'Alex') #后面相当于元组
tp1='i am {1},age {1}'.format('play',18,'Alex') #输出i am 18,age 18
tp1='i am {name},age {age},hobby {hobby}'.format(name='Alex',age=18,hobby='play')
tp1=''i am {name},age {age},hobby {hobby}'.format(**{'name':'Alex','age':18,'hobby':'play'})
tp1='i am {0[0]},age {0[1]},hobby {0[2]}'.format(['Alex',18,'play'],['CY',23,'music']) #0[0]中第一个0指的是format后面整个圆括号和它包含的东西,输出i am Alex,age 18,hobby play
tp1='i am {:s},age {:d},money {:f}'.format('Alex',18,9999.9)
tp1='i am {:s},age {:d}'.format(*['Alex',18])
tp1='numbers: {:b},{:o},{:d},{:x},{:X},{:%},{}'.format(15,15,15,15,15,15.87623,2) #b是二进制,o八进制,d整型,x十六进制(小写abcd),X(大写abcd),%显示百分比(1587.623000%默认小数点后六位)
函数
为了完成某特定功能而存在(内部开头'''The function definitions''',结尾return ...),返回值(如果是变量?)需要将值赋给新变量,然后打印该变量,否则打印出的是地址。函数遇到return就结束掉了,写多个return只会执行第一个。
Python语句是自上而下执行的,如果定义了一个有参函数,又定义了一个函数名相同的无参函数,则接下来调用默认是调用无参的那个,如果调用的时候传参将会报错。
使用函数的好处:
1.减少代码重用;
2.保持一致性,易维护;
3.可扩展性。
过程的定义:
没有返回值的函数,没返回值返回None。
返回值可以是多个值,返回的其实是元组
总结:
返回值数=0 返回None
返回值数=1 返回object
返回值数>1 返回tuple
变量是不占空间的,相当于门牌号,值才占空间。
形参只有在被调用时才会分配内存单元,调用结束即可释放所分配的内存单元,只在函数内部有效。
实参可以是常量、变量、表达式、函数等,无论何类,进行函数调用时都必须有确定的值,以便把这些值传送给形参。
调用的位置参数test(1,2,3)(位置必须固定,不能多或少参数)和形参一一对应,如果调用使用的是关键字参数test(y=2,x=1,z=3),无需一一对应,但也不能多或缺参数。如果混用位置参数和关键字参数则位置参数一定要在关键字参数左边(另外,test(1,2,z=3,y=4)也会报错,y值不会覆盖。)
形参如果包括设置默认值的参数可以不给它传值使用默认值,或者赋新值覆盖。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 def test(x,*args): 4 print(x) 5 print(args) 6 print(args[0]) 7 args.append('x') 8 print(args)
1.
输入
test(1,2,3,4,5,6)
输出
Traceback (most recent call last):
File "<input>", line 3, in <module>
1
File "<input>", line 7, in test
AttributeError: 'tuple' object has no attribute 'append'
(2, 3, 4, 5, 6) #元组
2
2.
输入
test(1,{'name':'alex'})
输出
1
({'name':'alex'},)
3.
输入(函数体最后加一条print(args[0][0]))
test(1,['x','y','z'])
输出
1
(['x','y','z'],)
x
4.
输入
test(1,*['x','y','z']) #遍历列表的元素依次赋给args元组
输出
1
('x','y','z')
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 def test(x,**kwargs): 4 print(x) 5 print(kwargs)
1.
输入
test(1,y=2,z=3)
输出
1
{'y':2,'z':3}
2.
输入
test(1,y=2,z=3,z=3) #会报错,一个参数不能传两个值
def test(x,*args,**kwargs) #参数顺序不要变,名称最好也别变