说明:教程参考:http://www.liaoxuefeng.com/
启动和运行
python3的运行方式有3种:
1、命令行进入python操作环境,然后以手工输入命令的方式执行,执行的结果会自动显示。
2、使用 命令"python fileName.py" ,主动调用.py文件,执行过程不会完全显示(比如执行“1 + 2”)。
3、在unix环境中,在.py文件头注释python命令路径,然后添加可执行权限,便可直接运行。
#!/usr/bin/python3
#和shell脚本开头注释一样
输入和输出
输出:
print("string")
1、与c/c++一致,依然可以使用格式化输出,但需要使用%给元素标记。
absNewName = abs
print("new name value : %d" %(absNewName(-1)))
#输出:new name value : 1
2、print可以使用单引号或双引号包括字符串(为了与c/c+一致,使用双引号),通用的转义字符依然可用(比如 '\n')。
3、可以使用多个双引号同时打印多段字符,通过逗号分隔,逗号最终被解释为空格。
4、print中未被引号包括的数,会自动进行数值运算。未被引号包括的字符,会解释为变量。
输入:
input("string")
name = input("please enter your name")
print(name)
编码:
为了让python解释器按照utf-8编码读取字符串,需要在文件头加上:
# -*- coding: utf-8 -*-
当字符串数据在网络传输,或者存储在磁盘时,为了使传输的字节数尽量的少,需要将utf-8以字节的方式存储。
#使用b前缀,使字符串以字节为单位
x = b"ABC"
#使用后缀 .decode('utf-8'),将从网络或磁盘上读取的字节流转换为
#utf-8格式
b"\xe4\xb8\xad\xe6\x96\x87".decode('utf-8')
#使用len()函数计算字符串有多少字符
>>> len("中文")
2
语法
注释
与shell脚本一样,使用"#"注释
代码块
当语句以冒号结尾时,缩进的语句视为代码块。
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
数据类型
整数 :任意大小的正负整数,以“0x”开头则表示16进制
浮点数 :表示方式与c/c++一样,比如"0.123","1.1e-10"
字符串 :以单引号或双引号包括的字符,支持中文输入。
#支持r ''string'' 格式,代表string中的内容不转义
print(r"abc \n def")
#输出 abc \n def
#可以用 ord函数反算对应的 unicode码
print("中对应的 Unicode:",ord('中'))
布尔值 :使用 "True"和"False"
#可以使用 and / or / not运行
print(True and False)
空值 :None
list
list类型是c/c++中数组与链表的一个结合体,具有如下特性。
#1、定义list,list中也可以嵌套list
listName = ["a","b","c"]
list2 = ["d",listName,"e"]
#list中的数据类型也可以不同
list3 = [123,list2]
#2、得到list的值
#用下标访问元素,下标为 “-1”时,代表最后一个元素,
#为-2时代表倒数第二个元素,以此推类
print(list3[-1])
输出:['d', ['a', 'b', 'c'], 'e']
#3、使用len()函数得到元素的个数
#4、使用append()方法添加元素到末尾
list3.append("f")
#5、使用insert()方法插入元素到指定位置
list3.insert(1,"g")
#6、使用pop()方法,删除指定位置元素
list3.pop(1)
tuple
tuple是list的固定形式,使用括号"()"定义,也就是说tuple初始化好以后就不能变了。
注意:
1、可以在tuple中引用list元素,这样list元素是可变的。tuple元素就类似于c/c++的 const指针,既指针指向的内容可变,但指针不变。
2、当定义只有一个元素的tuple时,需要添加一个逗号,不然会被解析为一个变量。
#tuple
t = (1,)
#变量
t= (1)
变量
python的变量为动态的,不需要指定变量类型。
#a是整数
a = 123
#a是字符串
a = "ABC"
运算符
需要特别说明除法,与c/c++不一样:
a / b 代表得出浮点值
a // b 代表只得整数
a % b 代表只得余数
条件判断
#注意冒号
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
循环
#将元素依次赋值给变量,并在循环体中运行
for <变量> in <元素>:
<循环体>
#当条件为真时,循环体执行
while <条件> :
<循环体>
#使用break可以退出循环
#使用continue可以跳过这次循环,开始下一次循环
dict
dictionary 的简称,通过{"名称",数值}的方式存放数据,可以快速的通过名称,查找到数值。
#使用大括号定义,"名称":数值方式赋值
d = {"a":1,"b":2}
#取值使用方括号
print(d["a"])
#通过in判断"名称"是否有对应的数值,有则返回True,否则为False
print("a" in d)
#通过get()方法也可以判断"名称"是否有数值
d.get("a") #若有则返回True,否则无返回
d.get("a",-1) #若没有则返回-1
#使用pop()方法删除一组元素,对应的数值也删除
d.pop("a")
注意:dict中的元素,都必须是常量!
set
set可以看成数学意义上的无序和无重复元素的集合,若有重复元素,会自动被过滤。
#使用set(list)方式初始化
s = set([1,2,3,3,4])
#结果为 {1,2,3,4}
#使用add()方法添加元素
s.add(5)
#使用remove()方法删除元素
s.remove(4)
注意:set中的元素,都必须是常量!
函数
#通过将函数名赋值给变量的方法,等同于给函数取别名
a = abs
a(-1)
自定义函数,使用如下格式
def <函数名> (<形参>) :
<函数体>
return <返回值>
#若<函数体>为pass时,就是一个空函数
#返回值可以有多个,使用逗号隔开,实际上返回的是tuple类型
#形参中可以为其指定默认值,这样在调用函数时可以不用输入默认参数
#注意,默认参数需要指向常量
def power (x, n = 2):
s = 1
while n > 0:
n = n -1
s = s * x
return s
print(power(5))
可变参数的定义如下
#当在形参前面加入星号"*",表示一个可变参数,其内部自动组装为tuple
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
#当输入的参数是list或者tuple时,也可以在前面加"*",代表依次传入参数
nums = [1, 2, 3]
calc(*nums)
关键字参数的定义如下:
#当在形参前面加入两个星号"**",便是关键字参数,其内部是dict
#在内部可以只传入必选参数
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
#当外部是dict时,也可以在前面加"**",代表依次传入参数
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
#可以用命令关键字参数来限制关键字参数的名字,需要分隔符 *
def person(name, age, *, city, job):
print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
#当函数定义中有了可变参数,则不需要分隔符 *
person(name, age, *args, city, job):
print(name, age, args, city, job)
注意:
1、参数的定义顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
2、对于任意参数,都可以通过func(*args, **kw)的形式调用
3、函数依然可以使用递归调用
高级特性
切片
切片操作可以从list或tuple中输出指定的一段数据,比如:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
#打印从索引0开始,到3为止,但不包括索引3的元素
print(L[0:3])
#如果第一个索引是0,可以省略
print(L[:3])
#也可以支持倒数,此时0也可以省略
print(L[-2:0])
#也可以指定输出间隔,表示输出前10个数,每两个取一个
print(L[:10:2])
#所有元素,每2个取一个
print(L[::2])
列表生成式
用于快速简单生成list
#生成列表 1*1 、2*2、.......11*11,
#注意表达式 x*x需要放在for前面,整个表达式需要方括号包围
d = [x * x for x in range(1,11)]
#可以在for循环后面加入条件判断
#注意中间并没有冒号
d = [x * x for x in range(1,11) if x % 2 == 0]
#可以使用两层循环
[m + n for m in 'ABC' for n in 'XYZ']
#输出:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器
列表生成式用于一次性产生一个完整的List,而生成器用于每次调用只往后产生一个结果。
#生成生成器 1*1 、2*2、.......11*11,
#注意表达式 x*x需要放在for前面,整个表达式需要圆括号包围
d = (x * x for x in range(1,11))
#可以多次使用print(next(d)),不断输出结果
#也可以使用for循环迭代输出
for n in d:
print(n)
#也可以定义函数类的生成器,此时odd()函数返回的类型就是生成器,
每调用一次,函数在yield处返回,下次调用则在上次yield后继续执行
def odd():
print("step 1")
yield 1
print("step 2")
yield 3
print("step 3")
yield 5
#比如:
n = odd()
print(next(n))
print(next(n))
print(next(n))
#输出:
step 1
1
step 2
3
step 3
5