Python3 入门专栏
http://blog.csdn.net/column/details/19679.html
编码基础
源码编码
默认情况下,python 3 源码文件会以 UTF-8 编码,所有的字符都是 unicode 字符串,也可以在py文件中通过以下为源码指定编码(以下将编码更改为 gbk):
# -*- coding: gbk -*-
标识符
python 中的标识符有以下要求:
-
第一个字符必须是字母或者下划线“_”;
-
标识符其他部分必须由字母、数字、下划线组成;
-
标识符对大小写敏感;
python 2 及以下的标识符必须是 ASCII 字符,而 python 3 允许非 ASCII 字符作为 标识符;
保留字
python 标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
import keyword
print(keyword.kwlist)
输出如下:
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
运算符
-
算数运算符: +(加),-(减) ,*(乘) ,/(除),%(取模),**(幂,x**y 为 x 的 y 次方),//(除,取整数)
-
比较运算符:== ,!= ,> ,< ,>= ,<=
-
赋值运算符:=,+=,-=,*=,/=,**=,//=
-
位运算符:&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移运算),>>(右移运算)
-
逻辑运算符:and(布尔与),or(布尔或),not(布尔非)
-
成员运算符:in,not in
- 身份运算符:is,is not(比较两个对象的储存单元)
== 和 is 的区别:
== :是进行操作数值的比较;
is :是进行操作数内存地址的比较,x is y 相当于 id(x) == id(y);
1 == 1 # true
a = 1; b = 1
a == b # true
a is b # false
id(a) == id(b) # true
行与缩进
python 不像 Java,C++ 使用分号来划分代码语句,使用大括号{}来划分代码块,而是使用缩进和段落来划分代码块和代码语句,如下:
if True:
print("item1")
else:
print("item2")
python通常是一行写完一句代码语句,如果代码过长,可以使用反斜杠 \ 来实现多行语句,如下:
greeting = "Are" + " you" + " OK?"
#等同于
greeting = "Are" + \
" you" + \
" OK?"
在 [] ,{},() 中的多行语句,可以不是用 \,如下:
list_sample = ["Are", "you",
"OK", '?']
python 不提倡将多行语句写在同一行中,如果非要这么做,可以使用分号隔开,但是不提倡这么做:
user = "assad"; print("Hello " + user)
注释
单行注释是以 # 开头的;
多行注释以 ''' ''' 或 """ """ 包含;
# 单行注射
'''
多行注释
多行注释
'''
"""
多行注释
多行注释
"""
标准输入输出
标准输出
print 函数为标准流输出函数,默认输出是换行的,如果需要不换行的输出,需要在 print 函数入参变量加上 end=“”:
val1 = "a"
val2 = "b"
# 换行输出
print(val1)
print(val2)
# 不换行输出
print(val1, end=" ")
print(val2, end=" ")
print()
以上代码输出结果:
a
b
a b
标准输入
input 函数为标准流输出函数,参数为提示性的字符串,返回值为用户输入字符串,使用该语句会导致一个线程阻塞;
str_input = input("please input something: ") # 获取用户输入
print("you input:" + str_input) # 打印用户输入
input("Enter anything to exit")
基本数据类型
不像Java , C++ 等强类型语言,python 是一种动态语言,在声明变量或字面量时,不需要为其声明数据类型,python 会根据赋值的字面量或对象自动转换类型;
python3 中有6个标准的数据类型:Number(数字),String(字符串),List(列表),Tuple(元组),Sets(集合),Dictionary(字典);
-
String,List,Tuple 都属于 Sequence 序列,内含的元素都是有序排列的;
-
Number,String,Tuple ,Sets 是不可更改的对象,List,Dictionary 是可变对象;
赋值操作
pythom 使用 = 操作符进行赋值,同样也支持多个变量赋值,如下:
var = "Hello"
var1 = var2 = var3 = 12
var4, var5, var6 = 10, 2.33, "Hello"
删除引用
可以使用del 操作符来删除对于对象的引用,如下:
var4, var5, var6 = 10, 2.33, "Hello"
del var4
del var5, var6
检验对象类型
可以使用type 函数获取变量对象类型,也可以使用isinstance 函数判断变量对象是否为某个类型;
var = 12
print(type(var)) # 输出:<class 'int'>
print(type(var) == int) # 输出 True
print(isinstance(vat, int)) # 输出 True
这两个函数判断类型的区别如下:
-
type():不会认为子类型是一种父类型;
-
isinstance():会认为子类型是一种父类型;
数字 Number
python3 支持的数字类型有 int(整型),float(浮点型),bool(布尔),complex(复数);
python3 中的整型只有 int 这一种,即长整型,没有 python2 中的 long;
var_int, var_float, var_bool, var_complex = 20, 23.33, True, 4+3j
print(type(var_int)) # 输出:<class 'int'>
print(type(var_float)) # 输出:<class 'float'>
print(type(var_bool)) # 输出:<class 'bool'>
print(type(var_complex)) # 输出:<class 'complex'>
字符串 String
python 可以使用 ' ' 或 " " 来指定一个字符串,这两种符号的含义完全相同(不像 PHP 等会有字面量引用和解析引用的区别),使用 + 作为字符串连接符,字符串会按字面意义级联字符串;
# 以下 4 个变量值相同
str1 = 'This is a String'
str2 = "This is a String"
str3 = "This"" is"" a"" String"
str4 = "This" + " is" + " a" + " String"
可以使用三引号 """ """ 或 ''' ''' 来指定一个跨行字符串(该字符串输出时会保留跨行格式);
str3 = """This is paragraph 1
This is paragraph 2 """
如上str3 输出时,会输出以下:
This is paragraph 1
This is paragraph 1
This is paragraph 2
类似C语言,字符串可以被索引和截取;
加号(+)是字符串连接运算符,星号(*)是重复操作;
字符串的元素不能修改;
var = "Hello World!"
print(var[0]) # 访问var第0个字符:H
print(var[1:4]) # 访问var第1到第3个字符:ell
print(var[:4]) # 访问var第0到第4个字符:Hell
print(var[6:]) # 访问var第6到最后一个字符:World!
print(var *2 ) # 重复输出 var : Hello World!Hello World!
列表 List
列表可以完成大多数集合类的数据结构实现,列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表;
List写在方括号 [ ] 之间,元素用逗号隔开;
列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表;
加号(+)是列表连接运算符,星号(*)是重复操作;
列表中的元素不能修改;
list1 = [12, 2.33, "Hello", "World"]
list2 = ["!", 1, 2]
print(list1) # 输出列表:[12, 2.33, 'Hello', 'World']
print(list1[0]) # 输出第1个元素:12
print(list1[1:3]) # 输出第2到第3个元素:[2.33, 'Hello']
print(list1[2:]) # 输出从第3个元素开始的所有元素:['Hello', 'World']
print(list1 * 2) # 输出2次列表:[12, 2.33, 'Hello', 'World', 12, 2.33, 'Hello', 'World']
print(list1 + list2) # 连接列表:[12, 2.33, 'Hello', 'World', '!', 1, 2]
元组 Tuple
元组(tuple)与列表类似,不同之处在于元组的元素不能修改;
元组同样可以被索引和截取;
元组写在小括号 ( ) 里,元素之间用逗号隔开;
tuple1 = ("abcd", 123 , 2.333, "Hello", 70.2)
tuple2 = () # 空元组
tuple3 = (20,) # 只包含一个元素的元组
集合 Sets
集合(set)是一个无序不重复元素的序列,主要功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,但是创建一个空集合必须用 set();
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
sey_empty = set()
print(student) # 输出集合,重复的元素被自动去掉:{'Mary', 'Tom', 'Jack', 'Jim', 'Rose'}
字典 Dictionary
字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合;
键(key)必须使用不可变类型,在同一个字典中,键(key)必须是唯一的;
dict1 = {"name": "assad", "age": 20, "city": "Guangzhou"}
dict2 = {}
dict2["one"] = "are you ok"
dict2[1] = 12
print(dict1["name"]) # 输出 dict1 中 key = "name" 的 value
print(dict2[1]) # 输出 dict2 中 key = 2 的 value
print(dict1.keys()) # 输出 dict1 的所有 key
print(dict1.values()) # 输出 dict1 的所有 value
常用的类型转换函数
int(x [,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串,类似 Java 的类 toString() 方法 |
eval(str) | 计算在字符串中的有效Python表达式,并返回一个对象,类似 js 的 eval() 函数 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
frozenset(s) | 转换为不可变集合 |
dict(d) | 创建一个字典。d 必须是一个序列 (key,value)元组。 |
流程控制
条件控制
python 条件语句的基本语法如下,同样的,python 也支持 if 嵌套:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
示例:
age = int(input("请输入你的年龄:"))
print()
if age < 0:
print("非法输入")
elif age < 18:
print("未成年人请自觉离开")
else:
print("新世界大门为你打开")
循环控制
python 循环语句支持 while 和 for 语句,同样支持 break,continue 关键字;
while 语法:
while condition:
statement_block
示例:
while True:
print "Are you Ok?"
for 语法
for <variable> in <sequence>:
<statements>
else:
<statements>
示例:
# 指定循环次数遍历
for i in range(5):
print i
# 等同于
for i in range(0,5):
print i
for i in range(10,100):
print i
# 遍历序列
students = ["Tom", "Jim", "Mary", "Tom", "Jack", "Rose"]
for e in students:
print(e)
greeting = "Are you OK? Mi fans!"
for ch in greeting:
if(ch == 'M'):
print "include charatcer M !"
break
pass 语句
python中 pass是空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句,如下:
while True:
pass # 等待键盘中断
# 一个最小的实现类
class MyEmptyClass:
pass
模块
python 使用用 import 或者 from...import 来导入相应的模块,语法如下:
# 将整个模块导入
import somemodule
#从某个模块中导入某个函数
from somemodule import somefunction
# 从某个模块中导入多个函数,
from somemodule import func1, func2, func3
# 将某个模块中的全部函数导入
from somemodule import *
模块搜索路径
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块,搜索路径被存储在标准库 sys 模块中的 path 变量,可以通过以下代码获取 sys.path:
import sys
print(sys.path)
一般 sys.path 包括以下:
-
当前脚本所在目录;
-
PYTHON_HOME
-
PYTHON_HOME\lib
- PYTHON_HOME\site-packages
__name__属性
一个模块的__name__属性用于储存该模块的名称;
一个模块被另一个程序第一次引入时,其主程序将运行。如果想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行,如下:
demo.py
if __name__ == "__main__":
print('module running itshef')
else:
print('code from other module')
运行 demo.py ,输出 module running itshef
useDemo.py
import demo.py
pass
运行useDemo.py ,输出 code from other module
标准库
python 本身已经包含了一个标准的函数库,可以完成各种日常需求,完整列表和用法参见官方文档:
python 完整标准库列表:https://docs.python.org/3.6/library/index.html