Python3 基础知识

一、Python3 基础语法
二、Python3 基本数据类型
三、Python3 数据类型转换
四、其他


一、Python3 基础语法:

编码
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串


标识符
第一个字符必须是 字母 或 下划线 _ 。
标识符的其他的部分由字母、数字和下划线组成。
标识符对大小写敏感。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了


python保留字
保留字即关键字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字
>>> import keyword
>>> keyword.kwlist


注释 Python中
单行注释以 # 开头
多行注释可以用多个 # 号,还有 ''' 和 """


行与缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。
缩进的空格数是可变的,但是 同一个代码块的语句必须包含相同的缩进空格数


多行语句
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 \ 来实现多行语句
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \


数字(Number)类型
python中数字有四种类型:整数、布尔型、浮点数和复数
complex (复数), 如 1 + 2j、 1.1 + 2.2j


字符串(String)
Python 中单引号 ' 和双引号 " 使用完全相同。
使用三引号(''' 或 """)可以指定一个多行字符串。
转义符 \。
反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n" 则 \n 会显示,并不是换行。
按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string。
字符串可以用 + 运算符连接在一起,用 * 运算符重复。
Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
Python 中的字符串不能改变。
Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
字符串的截取的语法格式如下:变量[头下标:尾下标:步长]


空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与代码缩进不同,空行并不是 Python 语法的一部分。书写时不插入空行,Python 解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

记住:空行也是程序代码的一部分。


同一行显示多条语句
Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割。

可以使用 .py脚本文件,
import sys; x = 'runoob'; sys.stdout.write(x + '\n')
也可以使用交互式命令
>>> import sys; x = 'runoob'; sys.stdout.write(x + '\n')
runoob
7

 

多个语句构成代码组
缩进相同的一组语句构成一个代码块,我们称之代码组。

像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

我们将首行及后面的代码组称为一个子句(clause)。

 

print 输出
print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=" "

 

import 与 from...import
在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

 

 


二、Python3 基本数据类型


Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。


多个变量赋值
Python允许 同时为多个变量赋值
a = b = c = 1 从后向前赋值
为多个对象指定多个变量
a, b, c = 1, 2, "runoob"

Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。


Number(数字)
Python3 支持 int、float、bool、complex(复数)
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long
内置的 type() 函数可以用来查询变量所指的对象类型
isinstance 和 type 的区别在于:
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。

注意:Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True,但可以通过 is 来判断类型,在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。

通过使用del语句删除单个或多个对象
del var
del var_a, var_b

数值运算
>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
注意:
数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数
在混合计算时,Python会把整型转换成为浮点数

 

String(字符串)
加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,与之结合的数字为复制的次数
Python 使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串
与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

 

List(列表)(Python 中使用最频繁的数据类型)
列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。

列表是写在方括号 [] 之间、用逗号分隔开的元素列表。

和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表

与Python字符串不一样的是,列表中的元素是可以改变的

# 翻转字符串
# 假设列表 list = [1,2,3,4],
# list[0]=1, list[1]=2 ,而 -1 表示最后一个元素 list[-1]=4 ( 与 list[3]=4 一样)
# inputWords[-1::-1] 有三个参数
# 第一个参数 -1 表示最后一个元素
# 第二个参数为空,表示移动到列表末尾
# 第三个参数为步长,-1 表示逆向

 

Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。元组中的元素类型也可以不相同,元组与字符串类似,可以把字符串看作一种特殊的元组。

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = () # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号


Set(集合)
1.集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典

2.# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a)

print(a - b) # a 和 b 的差集(a中元素减去b中含有a 中的元素的集合)

print(a | b) # a 和 b 的并集

print(a & b) # a 和 b 的交集

print(a ^ b) # a 和 b 中不同时存在的元素(a中有b中无,或者b中有a中无的集合)

 


Dictionary(字典)
字典(dictionary)是Python中另一个非常有用的内置数据类型。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
键(key)必须使用不可变类型。在同一个字典中,键(key)必须是唯一的。

构造函数 dict() 可以直接从键值对序列中构建字典如下:
>>> dict([('Runoob', 1), ('Google', 2), ('Taobao', 3)])
{'Runoob': 1, 'Google': 2, 'Taobao': 3}
字典类型也有一些内置的函数,例如 clear()、keys()、values() 等
注意:
1、字典是一种映射类型,它的元素是键值对。
2、字典的关键字必须为不可变类型,且不能重复。
3、创建空字典使用 { }。

 


三、Python3 数据类型转换
我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可
Python 数据类型转换可以分为两种:
隐式类型转换 - 自动完成
显式类型转换 - 需要使用类型函数来转换

————————————————
条件语句:
由于 python 并不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功;使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功

循环语句:
Python 提供了 for 循环和 while 循环(在 Python 中没有 do..while 循环):
while 循环——在给定的判断条件为 true 时执行循环体,否则退出循环体。
for 循环——重复执行语句
嵌套循环——你可以在while循环体中嵌套for循环

循环控制语句:
循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:
break 语句——在语句块执行过程中终止循环,并且跳出整个循环
continue 语句——在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass 语句——pass是空语句,是为了保持程序结构的完整性


————————————————
Python函数:
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)


NOT函数是用于对参数值求反的一种Excel函数。当要确保一个值不等于某一特定值时,可以使用NOT函数。简言之,就是当参数值为TRUE时,NOT函数返回的结果恰与之相反,结果为FALSE。比如NOT(2+2=4),由于2+2的结果的确为4,该参数结果为TRUE,由于是NOT函数,因此返回函数结果与之相反,为FALSE


在 Python 中有时候会看到一个 def 函数:
def sample(n_samples):
pass
该处的 pass 便是占据一个位置,因为如果定义一个空函数程序会报错,当你没有想好函数的内容是可以用 pass 填充,使程序可以正常运行


id() 函数用于获取对象内存地址。


not(0) 为true


时间、日期函数:
获取当前时间:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
localtime = time.localtime(time.time())
print "本地时间为 :", localtime


获取格式化的时间:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
localtime = time.asctime( time.localtime(time.time()) )
print "本地时间为 :", localtime
结果:
本地时间为 : Thu Apr 7 10:05:21 2016


问题:
pycharm print报错end of statment expected?
解决:
因为print输出语句写的不规范,需要将print的输出内容添加()


获取某月日历:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import calendar
cal = calendar.month(2016, 1)
print "以下输出2016年1月份的日历:"
print cal


自定义一个Python函数:
你可以定义一个由自己想要功能的函数,以下是简单的规则:
——函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
——任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
——函数内容以冒号起始,并且缩进。
——return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。


在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3] a="Runoob"
以上代码中,[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象


不定长参数
加了星号(*)的变量名会存放所有未命名的变量参数
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:
print var
return

# 调用printinfo 函数
printinfo( 10 )
printinfo( 70, 60, 50 )

以上实例输出结果:
输出:
10
输出:
70
60
50


匿名函数
python 使用 lambda 来创建匿名函数。
——lambda只是一个表达式,函数体比def简单很多。
——lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
——lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
——虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2

# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )


定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。


————————————————
Python 模块:
命名空间和作用域
——变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。
—— 一个 Python 表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。
——每个函数都有自己的命名空间
——如果要给函数内的全局变量赋值,必须使用 global 语句

dir()函数
dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数

特殊 字符串变量 __name__ 指向模块的名字,__file__指向该模块的导入文件名


globals() 和 locals() 函数
根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。
如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。
两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

reload() 函数
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下: reload(module_name)
比如想重载 hello 模块,如下:reload(hello)

问题:
print(f‘Hi, {name}‘)中的f有什么作用?
解决:
可以看成是一种标志,加了f,则’ '内中出现了{ }括起来的表达式,则{xxx}会被传过来的实际数据替换;如果没有,则直接输出Hi, {name}.


Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。

 

————————————————
Python 文件I/O:
输入函数:
raw_input函数
raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)

#!/usr/bin/python
# -*- coding: UTF-8 -*-
str = raw_input("请输入:")
print "你输入的内容是: ", str
结果:
请输入:Hello Python!
你输入的内容是: Hello Python!

input函数
input 可以接收一个Python表达式作为输入,并将运算结果返回

#!/usr/bin/python
# -*- coding: UTF-8 -*-
str = input("请输入:")
print "你输入的内容是: ", str
结果:
请输入:[x*5 for x in range(2,10,2)]
你输入的内容是: [10, 20, 30, 40]


open 函数
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写

# 打开一个文件
fo = open("foo.txt", "w")

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。


close()方法
File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入
用 close()方法关闭文件是一个很好的习惯
# 关闭打开的文件
fo.close()

write()方法
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。
write()方法不会在字符串的结尾添加换行符('\n')
fo.write( "www.runoob.com!\nVery good site!\n")

read()方法
read()方法从一个打开的文件中读取一个字符串
被传递的参数是要从已打开文件中读取的字节计数,该方法从文件的开头开始读入
str = fo.read(10)

文件定位:
tell()方法告诉你文件内的当前位置,比如上次读取文件内容,读取了10个字节,tell()函数会告诉你当前读取的位置是10。(就是说当前文件里的指针在 10 这个位置)
position = fo.tell()
print "当前文件位置 : ", position


seek(offset , from) (重新定位文件里的指针位置)
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print "重新读取字符串 : ", str


rename() 方法
rename() 方法需要两个参数,当前的文件名和新文件名。
语法:
os.rename(current_file_name, new_file_name)


remove()方法
你可以用remove()方法删除文件,需要提供要删除的文件名作为参数
语法:
os.remove(file_name)

import os
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")


Python的目录操作方法

mkdir()方法
可以使用os模块的mkdir()方法在当前目录下创建新的目录们
import os
# 创建目录test
os.mkdir("test")

chdir()方法
可以用chdir()方法来改变当前的目录
import os
# 将当前目录改为"/home/newdir"
os.chdir("/home/newdir")

getcwd()方法:
getcwd()方法显示当前的工作目录
import os
# 给出当前的目录
print os.getcwd()

rmdir()方法
rmdir()方法删除目录,目录名称以参数传递
import os
# 删除”/tmp/test”目录
os.rmdir( "/tmp/test" )

————————————————
Python 异常处理:
两种:
1.异常处理
2.断言(Assertions)
一、
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
fh.close()

二、
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
fh = open("testfile", "w")
fh.write("这是一个测试文件,用于测试异常!!")
finally:
print "Error: 没有找到文件或读取文件失败"

异常的参数:
示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "参数没有包含数字\n", Argument
# 调用函数
temp_convert("xyz")

$ python test.py
参数没有包含数字
invalid literal for int() with base 10: 'xyz'

触发异常:
我们可以使用raise语句自己触发异常
示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 定义函数
def mye( level ):
if level < 1:
raise Exception,"Invalid level!"
# 触发异常后,后面的代码就不会再执行
try:
mye(0) # 触发异常
except Exception,err:
print 1,err
else:
print 2

 

posted @ 2022-10-24 02:07  kuaiquxie  阅读(27)  评论(0编辑  收藏  举报