python 技巧 的整理
写在前面
逗比龙和jy 被我洗脑来学python了,还说我是传销。
写点 python的基本语法 和 python 技巧
一、模块的安装
主要有easy_install 和pip,用法如下
- easy_install XXXX
- pip install XXXX
- pip unistall XXXX
推荐用pip,以为它可以卸载模块
二、准备开始
- 在Linux下直接运行python #!/usr/bin/env python
- 标明文件编码,主要用于文件中如果有中文字符的话。。 # -*-coding:utf-8 -*–
- 单行注释 为#,多行注释可以用三个单引号如:”’ XXX ”’
三、python基本语法
(一)输入输出
1.输出:
从Hello word 开始
1 2 |
print 'hello world' print 'hello','world' |
ps:print 遇到,自动打印一个空格,上面两句打印效果是一样的 : )
2.输入:
读入一行数据,并且打印的demo:
1 2 |
name = raw_input() print name |
(二)一看就会的简单语句
1.条件
需要注意的是if /elif/ else后面均有 :
如果之后的语句只有一句,那么可以写在同一行
1 2 3 4 5 6 |
if age >= 18: print 'adult' elif age >= 6: print 'teenager' else: print 'kid' |
这么写也可以 : )
1 2 3 4 |
age = 20 if age >= 18: print 'adult' elif age >= 6: print 'teenager' else: print 'kid' |
2.循环
(1) for xx in xxx :
1 2 3 |
names = ['Michael', 'Bob', 'Tracy'] for name in names: print name |
1 2 |
for i in range(0 ,10 ): print i |
(2) while xx :
计算100以内所有奇数之和
1 2 3 4 5 6 |
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print sum |
当然这只是个样例。。
【高级篇】其实我们可以一行搞定…..:
range(a,b,c) a起始位置, b终止位置(不包括b),c步长
1 |
print sum(range(1,100,2)) |
(三)基本数据类型
1. list
list和C/C++中的数组很像,无非把{}改为[]
1 2 |
classmates = ['Michael', 'Bob', 'Tracy'] print classmates[0] |
如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
1 |
print classmates[-1] #Tracy |
以此类推,可以获取倒数第2个、倒数第3个:
1 2 |
print classmates[-2] #Bob print classmates[-3] #Michael |
添加和删除:
1 2 3 |
classmates.append('Adam') 添加到末尾 classmates.insert(1, 'Jack') 添加到指定位置 classmates.pop() 删除最后一个元素。要删除指定位置的元素,用pop(i)方法,其中i是索引位置 |
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
1 |
classmates[1] = 'Sarah' |
ist里面的元素的数据类型也可以不同,比如:
1 |
L = ['Apple', 123, True] |
list元素也可以是另一个list,比如:
1 2 |
s = ['python', 'java', ['asp', 'php'], 'scheme'] print len(s) #4 |
2.tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素
1 |
classmates = ('Michael', 'Bob', 'Tracy') |
3.dict
用Python写一个dict如下:
1 2 |
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} print d['Michael'] #95 |
判断key是否存在:
1 2 3 |
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} print 'Bob' in d #True print 'bob' in d #False |
通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
d.get(‘Thomas’)
d.get(‘Thomas’, -1)
pop(key)
再来看样例2:
1 2 3 |
a = {} a.setdefault('b',1) print a.items(),a.keys(),a.values() |
setdefault(‘b’,1) 如果key b不存在的话,就插入并且值设为1
而items=keys+values 即key和对应的value
4.set
要创建一个set,需要提供一个list作为输入集合:
1 2 |
s = set([1, 2, 3]) print s #set([1, 2, 3]) |
add(key)方法可以添加元素到set中
remove(key)方法可以删除元素:
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作,也可以用in 来判断是否在集合中:
1 2 3 4 5 6 |
s1 = set([1, 2, 3]) s2 = set([2, 3, 4]) print s1 & s2 #set([2, 3]) print s1 | s2 #set([1, 2, 3, 4]) print 1 in s1 #True print 5 in s1 #False |
(四)函数
1.定义
def name (params):
1 2 3 4 5 |
def my_abs(x): if x >= 0: return x else: return -x |
2.通过字符串调用Python函数
假如遇到下面这种情况:我们的函数名就差几个字母(因为是不同情况下的方法),难道要写个if elif 判断?
答案是No!这样太丑了!简直不忍直视!
答案是用eval(func_name)(params)进行调用!
eg:
1 2 3 4 5 6 7 8 |
# -*- coding:utf-8 -*- def hrsay_a(content): print content def hrsay_b(): print '1' func_a = 'hrsay_'+'a' eval(func_a)("I'm a handsome boy") |
输出:
I’m a handsome boy
(五)觉得很爽的玩意
1.长度
求任意类型的长度统一:
1 |
len(xxx) |
不像某语言,又size又length的
2.幂运算
python 的幂运算 如x的五次方,不必写pow(x,5)了,这么写太丑了。
直接x * 5 (两个 代表幂运算,perl也有这个)
3.切片
切片是最爽的功能:
看下面的例子你就秒懂了
1 2 3 4 5 6 7 8 9 10 |
x=range(10,100); #x是个list print x[:10 ] #输出前10个 print x[-10 :] #输出后10个 print x[:10 :3 ] #输出前10个,每3个取一次 print x[::2 ] #每两个取一次 print x[::-2] #倒着每两次取一个 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] [10, 13, 16, 19] [10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98] |
Python简洁优雅的风格一览无遗啊!!!!
(六)循环进阶
1. range和xrange
range和xrange如果从0开始,都可以省略0。
他们的用法一样: 下面四句都是等价的,即循环从[0,10) 不包括10
1 2 3 4 |
for i in range(10): for i in range(0,10): for i in xrange(10): for i in xrange(0,10): |
在Python2中,range直接生成了一个list,占用空间大,而xrange是生成一个迭代器,占用资源小,效率高,推荐后者。
PS:python3中删除了range的实现,改为xrange的实现方法。同时保留了xrange。
2. for 从大到小
你以为For循环只能从小到大么?
一开始学的时候我还觉得不科学,其实不是的。
下面的代码输出从10~1的数:是的,它和切片一样,最后一个都是表示步长
1 2 |
for i in xrange(10,0,-1): print i |
四、数组
数组创建和初始化
1 2 |
a = [0] * 10 #一维数组 b = [[0 for j in xrange(10)] for i in xrange(10)] #二维数组 |
warning:
二维数组不能采用如下方法进行初始化(这样只是浅拷贝)
1 2 3 4 |
a = [[0]*3]*3 #想要生成3*3的二维数组 print a a[0][0]=1 print a |
Output:
1 2 |
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] [[1, 0, 0], [1, 0, 0], [1, 0, 0]] |
五、字符串
写过其他高级语言的都知道,字符串的连接用 + ,字符串复制 = ,分割字符串split
(一)字母转化
1.大小写转化
1 2 3 4 5 |
name = 'Hrwhisper' upper_name = name.upper() #大写 lower_name = name.lower() #小写 print upper_name print lower_name |
输出:
HRWHISPER
hrwhisper
2. ASCII编码转化
1 2 |
print chr(65) #A print ord('A') #65 |
(二)join
数组转字符串
1 2 |
a = range(10) print ''.join(str(i) for i in a) |
字符串插值
1 2 |
a = ''.join(str(i) for i in xrange(10)) print ','.join(a) |
(三)切片
给定字符串位置进行复制
1 2 |
a = ''.join(str(i) for i in xrange(10)) #0~9 print a[3:6] #3~5 |
翻转字符串
1 2 |
a = ''.join(str(i) for i in xrange(10)) #0~9 print a[::-1] #9~0 |
字符串排序
1 |
str= "".join((lambda x:(x.sort(),x)[1])(list(str))) |
去除末尾换行
1 |
line = str.strip( '') |
六、栈和队列
python其实并没有这两个玩意,但是有list足矣。
栈
由于栈是后进先出,每次入栈,还是直接append(),出栈我们只需要pop(),即可
1 2 3 4 |
a = range(5) a.append(5) print a.pop() #5 print a #0~4 |
队列
由于栈是先进先出,每次入队,还是直接append(),出队我们只需要pop(0),即可
1 2 3 4 |
a = range(5) a.append(5) print a.pop(0) #0 print a #1~5 |
是不是比某写语言爽!!!
七、文件
推荐如下写法:每次读取一行,并且自带文件关闭。
1 2 3 |
with open ('e:\My Clippings.txt') as f: for line in f: print line |
毕竟咱总不至于非要这么写吧…
1 2 3 4 5 6 |
try: f = open('/path/to/file', 'r') print f.read() finally: if f: f.close() |
对于打开一个文件,可以有如下三种读取方法:
- read()一次性读取全部,适用于小文件。
- read(size) 每次读取size 个大小,适用于文件大小未知。
- readlines() 每次读取一行,可以来读配置文件
1 2 |
for line in f.readlines(): print(line.strip()) # 把末尾的'\n'删掉 |
八、类
变量命名
- xxx :特殊的变量,可以直接访问。
- __xxx:就是private
- 其他的为Public
有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问
八、除此之外,你还可以学:
各种科学库
爬虫
本博客若无特殊说明则由 hrwhisper 原创发布
转载请点名出处:细语呢喃 > python 基本语法 和 python 技巧 整理
本文地址:https://www.hrwhisper.me/python-grammar-and-some-tricks/
以后看