前言:
Python是解释型语言(Golang也是),C/C++是编译型语言。解释型语言的优势是跨平台性,不需要预编译和连接(所有的事情都在程序运行时发生),缺点是速度慢
.py格式的源码先转为字节码,再由PVM虚拟机运行,
一,基本使用以及语法
- 常见数据类型
1234 #数字
'spam' #字符串
[1,[2,'three'],4] #列表
{'food':'spam','taste':'yum'} #字典
(1,'spam',4,'U') #元组
myfile = open('myLib.py','r') #文件
set('abc'),{'a','b','c'} #集合
- 字符串加单引号,布尔型直接用True和False,行末不用分号,输出用print,不要随便缩进
name = 'lxd'
sex = True
print (name)
- 输入用input,默认是输字符串,限定输出格式用%
data = input('请输入')
print ('%f' % age)
- 双乘号作为求幂,字符串*数字表示输出多少个该字符串
print(2 ** 100)
print ('spam' * 10)
- 通过import 某个.py文件,可以引入模块,通过.运算符,可以访问其中属性
./myLib.py
title = '4416'
./main.py
import myLib
print myLib.title
- 通过dir(模块名)可以看到模块内部可用变量名,共性的有
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'title']
- 数字操作
import math
math.sqrt(16)
import random
random.random()
random.choice([1,2,3,4])
- 字符串操作, 数字,字符串和元组不可变,列表和字典可变
S = 'spam'
len(S)
print(S[0]) #左手第一个字符
print(S[-1]) #右手第一个字符
print(S[0:2]) #从第0到第2个字符的字符串
S.find('pa') #找到相对于字符串起始的偏移量,没有返回-1
S.upper()
S.isalpha()
line = 'aa,bb'
line.split(',')
- 模式匹配
#需要引入re模块
import re
match = re.match('Hello[ \t]*(.*)world', 'Hello Python world') #(.*)匹配任意文本
match.group(1) #代表 'Python'
phoneNumberRegex = re.compile(r'(\d{3})-(\d{3})-(\d{4})') #创建一个Regex对象,\d:0到9的所有数字,花括号表示特定匹配次数
mo1=phoneNumberRegex.search('my phone number is 010-123-4567') #向Regex对象search方法输入字符串,返回一个match对象
mo1.groups() #('010','123','4567')
- 列表
这里说一下,python的列表不像java和C++需要指定元素类型,可以把string,int,double都放进一个列表中
L = [123, 'lxd', 2.22]
#可以对列表进行类似字符串的操作
L[0] #123
L+[4,5] #[123, 'lxd', 2.22,4,5]
L.append('NI') #[123, 'lxd', 2.22,'NI']
L.pop(2) #[123, 2.22,'NI'] 删除第二个元素
L.sort() #默认升序
L.reverse()
- 边界检查,同样不允许下标越界,会报错
- 字典
python的字典是键值对,类似hashmap
D = {'name': {'姓' : '刘', '名' : '能'}, 'age': 18, 'job':['actor']}
#注意key值必须是定义好的变量或者字符串类型
#使用时用索引调value值
D['name'] #{'姓' : '刘', '名' : '能'}
D['job'].append('musician') #{'name': {'姓' : '刘', '名' : '能'}, 'age': 18, 'job',['actor', 'musician']} 是在'job'的value里进行append操作
#for循环输出D中key-value
Ks = list(D.keys())
for k in Ks:
print(k, '->', D[k])
#for遍历字符串
for c in 'spam':
print c.upper() # S P A M
#while循环
x = 3
while x > 0 :
print 'spam!' * x
x -= 1 #这边注意python不能写x--
"""输出结果
spam!spam!spam!
spam!spam!
spam!
"""
#迭代
squares=[x ** 2 for x in [1,2,3,4,5]] #[1,4,9,16,25]
- 文件操作
f = open('data.txt','w') #类似C文件描述符的打开方式,写模式打开
f.write('Hello')
f.close()
f = open('data.txt') #默认读方式
text = f.read() #把文件全部以字符串的形式读出
print text
- 自定义的类
class Worker:
def __init__(self, name, pay): #define 成员对象
self.name = name
self.pay = pay
def lastName(self): #成员函数
return self.name.split()[-1] #默认用空格分隔
def giveRaise(self, percent):
self.pay *= (1.0 + percent)
- 本章小结
数字,字符串,列表,字典,元组,文件,集合是python核心数据类型
数字,字符串,元组对象不可变
二,类型和运算
暂略
三,语句和语法
- Python语句
#记几个没见过的
while True:
pass # 空占位符
while True:
if exittest(): break
while True:
if skiptest(): continue
def gen(n):
for i in n: yield i * 2 #yield 生成器函数
#还有部分代码意义不明,等到后面再写
- Python和其它语言的关系&区别
#其他语言
if(x<y){
x = 1;
y = 2;
}
if x < y :
x = 1
y = 2
首先是大括号和分号没有了。复合语句用冒号结尾,这个是学python最开始容易错的地方
然后是省略小括号,(作者建议不要写)
对于嵌套块的处理,python是用缩进来表示,作者认为这能很大程度减少C程序中的由于缩进不严格带来的误解,比如两个if,只有一个else,到底对应哪个if的问题。这点我不认同,毕竟格式化一下,排版自动就好了。倒是全靠缩进,程序复杂了容易看不懂。(当然,python程序代码量肯定没有C多了)
四,if测试和语法规则
x = 'a'
if x == 'a':
print aaa
elif x == 'b':
print bbb
#类似switch结构
choice = 'ham'
print({'spam': 1.25,
'ham': 1.99,
'egg': 0.99
}[choice])
# 或者
branch = ({'spam': 1.25,
'ham': 1.99,
'egg': 0.99
})
print branch.get('spam','Bad choice')
print branch.get('bacon','Bad choice')
'''
1.99
1.25
Bad choice
'''