Python基础知识讲座
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。相对于 Python 的早期2.x版本,Python 3.x是一个较大的升级。为了不带入过多的累赘,Python 3.x 在设计的时候没有考虑向下兼容。本教程主要针对 Python 3.x 版本的学习。(官方宣布,2020年 1月1日, 停止 Python 2.x 的更新。)
python官方运行环境可到网站Download Python | Python.org找到合适版本下载。如我使用的是Windows环境下的3.8.3版。下载与安装比较容易,就不多说了。
安装好后,按下图所示,可以打开IDLE
IDLE是开发python程序的基本IDE(集成开发环境),当安装好python以后,IDLE就自动安装好了,不需要另外去找。打开 Idle 后出现一个增强的交互命令行解释器窗口(具有比基本的交互命令提示符更好的剪切-粘贴、回行等功能)。还有一个针对Python 的代码编辑器(有语法标签高亮和代码自动完成功能)、类浏览器和调试器。
交互式命令窗口可以用来执行单个指令,如果要执行多条指令组成的文件可以打开代码编辑器,参见下图:
对此不深入介绍了, 具体可参考博文 在Windows中搭建python开发环境与使用 https://blog.csdn.net/cnds123/article/details/98729627
下面介绍Python基础知识。
标识符
标识符就是一个名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。
标识符是由字符(Unicode字符)、下划线和数字组成,但第一个字符不能是数字。
标识符不能含空格。
标识符不能和 Python 中的保留字相同。
【如何查看python中的关键字?
查看方法
在IDLE Shell窗口中
import keyword
keyword.kwlist
参见下图:
进一步说明:Python 的关键字,可以通过 keyword 这个模块列出来
import keyword #先导入 keyword 这个模块
print('\n'.join(keyword.kwlist)) #列出关键字明细
len(keyword.kwlist)#给出关键字个数】
Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符。
参见下图:
Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。Python 中的标识符是区分大小写的。
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的如 __foo 代表类的私有成员,以双下划线开头和结尾的如 __foo__ 代表 Python 中特殊方法专用的标识,这类标识符是系统定义好的。
特别提示:上面的标识符,我从演示需要出发,比较自由的命名,严格来讲,需要遵从一些命名规则,这虽然不是必须的。做到见名知意,对大的程序中的后续维护修改,可以提供很大的便利。
起一个有意义的名字,尽量做到看一眼就知道是什么意思(提高代码可读性) 比如: 名字 就定义为 name , 定义学生 用 student。
小驼峰式命名法(lower camel case): 第一个单词以小写字母开始;第二个单词的首字母大写,例如:myName、aDog。
大驼峰式命名法(upper camel case): 每一个单字的首字母都采用大写字母,例如:FirstName、LastName。
在程序员中还有一种命名法比较流行,就是用下划线“_”来连接所有的单词,比如send_buf。
在此不多说了。
【python命名规则
类型 命名规则 举例
模块名/包名 全小写字母,简单有意义如果需要可以使用下划线 math、sys
函数名 全小写字母,可以使用下划线增加可阅读性 foo(), my_func()
变量名 全小写字母,可以使用下划线增加可阅读性 age、my_var
类名 采用驼峰命名规则,多个单词组成名称每个单词的首字母大写 MyClass
常量名 全部大写字母,可以使用下划线增加可阅读性 LEFT、TAX_RATE 】
标识符建议不要和内置函数名称相同,否则导致内置函数失效。
内置函数(built-in function, BIF) 在交互式的命令行环境里,可通过此链接查看 https://docs.python.org/zh-cn/3/library/functions.html
行和缩进
Python 与其他语言最大的区别就是,Python 的代码块(语句块)不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。
缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。
在 Python 的代码块中必须使用相同数目的行首缩进空格数。
python语句
python程序是由语句组成的,语句是由关键字、标识符、表达式(Expression)组成的,是程序执行的最小单位。下面给出一个简单例子:
name = "李明"
score = 90.5
print('%s的成绩%5.1f' %(name,score)) #输出 李明的成绩90.5
Python语句不必加分号,一行的末尾通常就是该行所写语句的结尾。
Python中所有流程控制语句都遵循相同格式:首行会以冒号终止,通常都是在首行下缩进的。缩进语句叫做块(有时叫做组)。
关于这些先大体了解即可,随着学习的不断深入将会逐步认识理解。
多行语句
可以使用斜杠( \)将一行的语句分为多行显示,如下所示:
total = item_one + \
item_two + \
item_three
语句中包含 [], {} 或 () 括号就不需要使用多行连接符。如下实例:
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
注释
python中单行注释采用 # 开头。
多行注释使用三个单引号(''')或三个双引号(""")。
注释的例子代码如下:
#注释的例子
str1='你好啊' #python字符串可以用英文单引号括起来
str2="你好呀" #python字符串可以用英文双引号括起来
print(str1)
print(str2)
'''此处是多行注释的例子
不要将多行注释和用三引号括起来的多行文本混淆
下面是一个多行文本的例子'''
str3='''梅花 王安石
墙角数枝梅,凌寒独自开。
遥知不是雪,为有暗香来。'''
print(str3)
参见下图:
空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
python中的空格
python对行首缩进空格数量要求非常严格——代码块中必须使用相同数目的行首缩进空格数,关键词后必须有空格 ,除此之外,为了增强可读性,逗号冒号的后面还有其它部分可以有空格,二元运算符前后可以加空格,运算符两边可加一个空格,如:
x = y + z
但作为函数参数时=前后可不加空格。
一行写多条语句
Python3 中,一行可以书写多个语句
语句之间用分号隔开即可,如:
print('I love you');print('very much!')
变量
变量(Variable)是使用赋值(assignment)操作符(如=)赋予一个值的名字。这就意味着在创建变量时会在内存中开辟一个空间。每个变量都有一个名称并存有一个值。
使用赋值语句(assignment statement)将值放入变量时,python解释器基于数据的数据类型(关于数据类型详见下一讲)分配内存空间。
python是一种解释型语言,Python 中的变量不需要声明类型。python可以通过直接赋值初始化让一个变量拥有内存和值,变量赋值后python解释器根据值自动完成对变量内存的分配。python变量的定义:
变量名 = 值
使用=给变量赋值。=左边是变量名,=右边是变量的值。
例、
age = 11 # 赋值整型变量
length = 10.50 # 浮点型
name = "John" # 字符串
python中变量赋值后,就意味着该变量定义了,变量需要先定义后使用(否则报未定义错误)。
深入了解可参见 Python变量的认识理解 https://blog.csdn.net/cnds123/article/details/116768499
【常量
一般编程语言的常量变量(简称常量(constant))是一种特殊变量,其值被赋值后不能改变,有些程序语言提供显式机制——若为常量变量再次赋值将产生语法错误。python中没有使用语法强制机制定义常量变量,而是将责任交由程序员处理,如果非要定义常量变量,通常将其名称约定全部使用大写字母,如:MAX_SIZE = 100。】
Python的输入输出
input()输入函数
语法
input([prompt])
参数
参数 | 描述 |
prompt | 提示信息。 |
返回值
用户输入的内容,返回 string 类型。
例、
strMsg = input("请输入:")
print('strMsg的内容是:', strMsg)
input() 函数,接受用户的输入,给出提示: “请输入:” ,并使用 变量 strMsg 保存用户输入的内容。
运行结果,参见下图:
输出函数print()
语法
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
将 objects 打印到 file 指定的文本流,以 sep 分隔并在末尾加上 end。 sep, end, file 和 flush 如果存在,它们必须以关键字参数的形式给出。
参数 | 描述 |
objects | 要输出的对象,是复数形式,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。 |
sep | 用来间隔多个对象,默认值是一个空格。 |
end | 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。 |
file | 要写入的文件对象,默认是标准输出。 |
flush | 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。 |
返回值
无返回值。
例、设置间隔符:
print("www", "baidu", "com", sep=".")
运行结果如下:
www.baidu.com
无论什么类型的数据,包括但不局限于:数值型,布尔型,列表变量,字典变量...都可以直接输出:
list = [1,2,'a']
print(list) #输出列表变量
运行结果如下:
[1, 2, 'a']
数据的格式化输出(c语言printf 风格的字符串格式化 https://docs.python.org/zh-cn/3/tutorial/inputoutput.html#fancier-output-formatting )
符 号 | 描述 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
例
s='小兵'
x=11
print('%s明年%d岁' %(s,x))
运行结果如下:
小兵明年11岁
下面再给出几个例子:
print("%8.1f" %27.658)
"%8.1f" %27.658
等等,参见下图:
format函数方法(在此不详述,可参见7. 输入与输出 — Python 3.11.2 文档 )
格式:
str.format(*args, **kwargs)
执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换字段(replacement field)。 每个替换字段可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换字段都会被替换为对应参数的字符串值。如:
print(" 1 + 2 的和是{}".format(1+2)) #输出:1 + 2 的和是3
括号及其里面的字符【称作替换字段(replacement field)或格式化字段(format fields)】将会被 format() 中的参数替换。
又如:
name = "小兵"
age = 15
height = 1.59
print("他的名字是{}。已经{}岁了。身高是{}米".format(name, age, height))
#输出:他的名字是小兵。已经15岁了。身高是1.59米
当语句以冒号:结尾时,缩进的语句视为代码块(语句块)
代码块,不需要使用大括号 {} ,缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。如:
if True:
print ("回答")
print ("True")
else:
print ("回答")
print ("False")
赋值语句
运算 | 解释 |
spam='Spam' | 基本形式 |
spam,ham = 'yum','YUM' | 元组赋值运算(位置性) |
[spam,ham]=['yum','YUM'] | 列表赋值运算(位置性) |
a,b,c,d='spam' | 序列赋值运算,通用性 |
a,b,c = [1,2,3] | 序列赋值,通用性 |
a,*b = ' hello' | 扩展的序列解包(Python3.0) |
x = y = z =20 | 多目标赋值运算 |
x += 6 | 增强赋值运算(相当于x = x + 6) |
参见下图:
python中增强型赋值运算符
运算符 | 描述 | 实例 |
+= | 加法赋值运算符 | a+=b 等价于 a = a+b |
-= | 减法赋值运算符 | a-=b 等价于 a = a-b |
*= | 乘法赋值运算符 | a*=b 等价于 a=a*b |
/= | 除法赋值运算符 | a/=b 等价于 a= a/b |
//= | 整除赋值运算符 | a//=b 等价于 a=a//b |
%= | 求模赋值运算符 | a%=b 等价于 a= a%b |
**= | 求幂赋值运算符 | a**=b 等价于 a= a**b |
>>= | 右移赋值运算符 | a>>=b 等价于 a = a>>b |
<<= | 左移赋值运算符 | a<<=b 等价于 a= a<<b |
&= | 换位与赋值运算符 | a&=b 等价于 a= a&b |
|= | 按位或赋值运算符 | a|=b 等价于 a=a|b |
^= | 按位异或赋值运算符 | a^=b 等价于 a=a^b |
python中的标点符号
python使用的标点符号,如()"" '' + - * /:,等等是半角英文的,字符串中(字符串内部)的除外。新手要特别注意这点。
【全角和半角
☆全角:是一种电脑字符,占两个字节。
在全角中,字母和数字等与汉字一样占据着等宽的位置。
☆半角:是指一个字符占一个字节。
半角是ASCII方式的字符。
】
附录、python的print与c的printf对比
c的printf例子如下:
#include <iostream>
int main(){
float a=6.5;
int b=10;
char*str="wang";
printf("a=%.2f,c=%d,str=%s",a,b,str);
}
python的print例子如下:
a=6.5
b=10
str="wang"
print("a=%.2f,c=%d,str=%s"%(a,b,str))