Python 3(2)基本语法

时间:2023-01-10 22:08:52

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