python基础篇之进阶
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)