python基础篇之进阶
参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html
python种类
1. cpython 使用c解释器生产.pyc(字节码),然后转换成机器码,最后到cpu
2. javapython java解释器-->字节码-->机器码-->cpu
3. IronPython C#解释器-->字节码 --> 机器码--> cpu
4. pypy 内部使用自己的解释器编译成字节码-->机器码.最后在外部执行的时候直接是机器码,速度要快
python2.7中编码转换简介:
gbk转utf8: gbk → unicode(编码encode)→ utf8
utf8转gbk: uft8 (解码decode)→ Unicode → gbk
获取传入的参数:
import sys
print sys.argv 【argv类型是个列表】
python index.py runserver 8080
['index.py', 'runserver', '8080']
小知识点:
-5 ~ 257 小数池,在内存空间,做缓存用
pass 占位,什么都不干
contains 和 in 作用相同
整数:
【bit_length:计算二进制需要借用几位算出18】
age = 18
result = age.bit_length()
print(result)
18
bin(18)
print(bin(18))
0b10010 #b是二进制的意思 【abs:返回绝对值】
age = 18
print(age.__abs__())
18
age = -18
print(age.__abs__())
18
【divmod:相除18//9 求商 和 余数】
age = 18
result = age.__divmod__(9)
print(result)
(2, 0)
【add: 相加】
age = 19
result = age.__add__(1)
print(result) 【把18转换为浮点数】
num=18
print(num.__float__())
【计算数据类型占用内存大小】
num = 18
result = num.__sizeof__()
print(result)
字符串操作
【查找freddy是否包含“re”字符;与【if name in er:】用法类似】
name = 'freddy'
result = name.__contains__('re')
print(result) 【把首字母转换成大写】
name = 'freddy hahahahah'
result = name.capitalize()
print(result) 【把首字母的大写转换成小写】
name= 'Freddy'
result = name.casefold()
print(result) 【】 【把freddy居中,并且在freddy周围加上“*”符号;】
name = 'freddy'
result=name.center(30,'*')
print(result) 【查找d出现的次数】
name = 'freddy'
result = name.count('d')
print(result) 【在0~4范围内,查找d出现的次数】
name = 'freddy'
result = name.count('d',0,4)
print(result) 【把“唐胜伟”转换成gbk编码】
name = '唐胜伟'
result = name.encode('gbk')
print(result) 【在 0,4 这个范围内查找是不是以 y 结尾】
【查找范围规则:大于等于0 and 小于3】
name = 'freddy'
result = name.endswith('y',0,4)
print(result) 【把 tables键 换成8个空格;应用场景:把配置文件的tab全换成空格】
name = 'fre\tddy'
result = name.expandtabs()
print(result)
print(len(result)) 【查找指定字符所在的下标位置,find找不到时返回“-1”;index找不到时会“报错”】
name = 'freddy'
#result = name.find('d')
result = name.index('d')
print(result) 【字符串拼接】
name = 'freddy {0} as {1}'
result = name.format('1sb','2sb')
print(result) 【把列表里的字符串进行拼接】
name = ['f','r','e','d','d','y']
result = "_".join(name)
print(result) 【以“is”为标志位,把字符串分割】
name = 'freddyissb'
result = name.partition('is')
print(result) 【把s替换成8; "3":指定你想替换几个,并不是替换的范围】
name = 'freddyissb'
result = name.replace('s','8')
#result = name.replace('s','8',3)
print(result) 【去掉换行符,以列表形式打印出来】
name = '''
aa
bb
cc
'''
result = name.splitlines()
print(result) 【以空格为分割符进行切割】
name = 'Freddy freddy'
result = name.split(' ')
print(result) 【strip:指定去掉的字符,和splitlines功能相同;split:去掉分割符并进行拼接】
name = '''
aa
bb
cc
'''
result = name.split("\n")
print(result) 【去掉字符串两边的空格】
name = ' Freddy '
result = name.strip()
print(result)
【去掉字符串左边的空格】
name = ' Freddy'
result = name.lstrip()
print(result)
【去掉字符串右边的空格】
name = 'Freddy '
result = name.rstrip()
print(result) 【查找‘freddy’中是否包含‘re’】
name='freddy'
result = name.__contains__('re')
print(result) 【判断是否包含字母or数字】
name = 'freddy123'
result = name.isalnum()
print(result)
【判读是否只是字母】
name = 'freddy123'
result = name.isalpha()
print(result)
【判断是否只是数字】
name = 'freddy123'
result = name.isdigit()
print(result)
【 检测是否为空】
name = 'freddy'
result = name.isspace()
print(result)
【判断每个单词首字母是否是大写】
name = 'Freddy Freddy'
result = name.istitle()
print(result)
【把大写字母全部转换成小写字母】
name = 'FREDDY'
result = name.lower()
print(result)
【判断字符串是否相等】
name = 'Freddy'
result = name.__eq__('Freddy')
print(result)
列表
【给列表追加内容】
name = ['Freddy']
name.append('sb')
print(name)
【统计Freddy的个数,嵌套列表,只会统计外层】
name = ['Freddy','Freddy',['Freddy','Freddy']]
result = name.count('Freddy')
print(result) 【对原来列表的扩展】
li = list([1,2,3,])
print(li)
li.extend([4,5,])
print(li) 【在第0个位置放入一个freddy】
li = list([1,2,3,])
li.insert(0,'freddy')
print(li) 【pop:删除列表中下标是0的值】
li = list([1,2,3,])
ret = li.pop(0)
print(li)
print(ret) ##能够打印出pop删除的值; 【指定删除11这个数字】
li = [11,11,22,33,44]
print(li)
li.remove(11)
print(li) 【反转打印显示结果】
li = [11,11,22,33,44]
print(li)
li.reverse()
print(li) 【使用sort进行排序】
name = ['bb','cc','aa']
name.sort()
print(name)
元组:
元组and元素:
【元组的元素不可修改】
【元组元素的元素可以修改】
【统计这个元组中有几个88】
name = (22,88,33,55,33,88)
result = name.count(88)
print(result) 【查找元组中88的第一个索引值】
name = (22,88,33,55,33,88)
result = name.index(88)
print(result)
【判断元组中是否包含88这个数字】
name = (22,88,33,55,33,88)
result = name.__contains__(88)
print(result)
字典: dict是内置类的变量名,自己不能使用dict名字做变量名。
定义字典:
【以下这两个例子意义相同】
dic = {'k1':'v1','k2':'v2'}
dic = dic(k1='v1',k2='v2')
字典取值操作:
获取字典中的key: keys
获取字典中的value: values
同时获取key和value: items
【用print取字典里面的值,取不到会报错】
dic={'k1':'v1','k2':'v2'}
print(dic['k1'])
print(dic['k2'])
print(dic['k3']) 【这个方法找不到“K3”会返回None,如果传入值,则会打印传入的值】
print(dic.get('k1'))
print(dic.get('k2'))
print(dic.get('k3','alex')) 【pop必须要指定删除的“k”】
dic={'k1':'v1','k2':'v2'}
dic.pop('k1')
print(dic) 【给dic字典增加一个“key”】
dic={'k1':'v1','k2':'v2'}
dic['k3'] = 123
print(dic) 【给dic字典增加一个“key”】
dic={'k1':'v1','k2':'v2'}
dic.update({'k3':888})
print(dic) 【清空字典】
dic={'k1':'v1','k2':'v2'}
dic.clear()
print(dic) 【浅copy字典】
food = {'1':'apple','2':'banana'}
newfood = food.copy()
print(newfood)
set集合
set集合是一个无序且不重复的集合。
创建一个set集合:
name = set('abbbbbbbbbb')
print(name)
set(['a', 'b'])
小练习
例1:把 [11,22,33,44,55,66,77,88,99,],11~55放到列表A中,把66~99放入列表B中,最后以字典的形式打印出来:
例1:
san_list = [11,22,33,44,55,66,77,88,99,90,]
dic = {}
dic['k1']=san_list[0:5]
dic['k2']=san_list[5:]
print(dic) 例2:
Li = [11,22,33,44,55,66,77,88,99,90,]
Li1=[]
Li2=[]
for num in Li:
if num > 66:
Li1.append(num)
else:
Li2.append(num)
dic={'k1':Li1,'k2':Li2}
print(dic) 例3:
Li = [11,22,33,44,55,66,77,88,99,90,]
Li1 = []
Li2 = []
for num in range(len(Li)): ##检索Li整个列表,使用len函数来计算循环次数;
if int(Li[num]) > 66: ##对比Li里面的值是否大于66;
Li1.append(Li[num]) ##把大于66的值写入到Li1列表中;
else:
Li2.append(Li[num])
dic = {'k1':Li1,'k2':Li2} ##字典嵌套列表的形式打印出结果来;
print(dic) 例4,推荐:
Li = [11,22,33,44,55,66,77,88,99,90,]
dic = {}
for num in Li:
if num > 66:
if 'k1' in dic.keys():
dic['k1'].append(num)
else:
dic['k1'] = [num,]
else:
if 'k2' in dic.keys():
dic['k2'].append(num)
else:
dic['k2'] = [num,]
print(dic)