0%

python 基本语法 和 python 技巧 整理

python 技巧 的整理

写在前面

逗比龙和jy 被我洗脑来学python了,还说我是传销。

expression cry 我这是解救他们于水深火热好么!expression maimeng

写点 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
7
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
4
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
7
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

其他语言中也称为map,使用键-值(key-value)存储

用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)

要删除一个key,用**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
6
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
9
10
# -*- 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,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问

八、除此之外,你还可以学:

各种科学库

爬虫

请我喝杯咖啡吧~