前言:
Python作为一门编程语言,和其它语言也是有非常多的类似的语法规则,比如, 保留关键字,命名规则,等等。因此,学习编程,应该是挑选一门自己喜好的语言来进行,那么,如果在想深入学习其它的编程语言,将会事半功倍的。
本文,就Python的基本语法规则进行一些讨论,并会给出一些相应的例子,以使各位同学能够对Python的语法有一个比较深刻得印象。
一,
标识符
标识符就是我们在程序中需要用到的变量、常量、函数、属性、类、模块等需要我们来自己定义的名字。尽管我们可以自主定义标识符,但是构成标识符有一定的规范:
1)大小写的区分,Homework和homework属于两个不同的标识符。
2)关键字不能作为标识符。
3)标识符首位可以用下画线“_”但是不可以是数字。例如 _get、__doc__等是可以的,123get是不可以的。
4)除去首字母,其他位可以使用下画线“_”,数字和字母。例如get_money、name2、list123等。
5)不能使用内置函数作为标识符。
通俗的说,一切需要我们自己定义起名字的东西就叫标识符。比如,我定义一个方法(函数),这个方法(函数)是需要一个名字的,那么,这个函数的名字就是标识符。
例如下面的代码,哪些是标识符你知道吗?
b = dir(__builtins__)
print(b)
print(len(b))
标识符其实就一个啦,就是b。那么,下面这一段代码哪些是标识符呢?
import os
import sys
def find_file_ends(path):
for i, j, k in os.walk(path):
for file in k:
if file.endswith(houzhui):
print(os.path.join(i, file))
def find_file_starts(path):
for i, j, k in os.walk(path):
for file in k:
if file.startswith(qianzhui):
print(os.path.join(i, file))
if __name__ == "__main__":
path = sys.argv[1]
tongpei = sys.argv[2]
qianzhui = ""
if tongpei.startswith("."):
houzhui = sys.argv[2]
find_file_ends(path)
else:
qianzhui = sys.argv[2]
find_file_starts(path)
find_file_ends,find_file_starts,path,tongpei,qianzhui,houzhui这些就是标识符啦。由以上代码可以看到,这段代码是由标识符和关键字组合的自定义函数,引用到了内置函数,内置类,由这些元素组成的。
二,
关键字
关键字是Python语言中被赋予特殊含义的单词,这些关键字不可以被用作标识符来使用。
Python是区分大小写的,例如关键字if是不可以用作标识符,但是IF是可以用作标识符的。Python关键字有33个,分别是:
False | None | True | and | assert | as | async | await | break | class |
continue | def | elif | else | except | finally' | for | from | global | if |
import | in | is | lambda | nonlocal | not | or | pass | raise | try |
while | with | yield |
如何知道到底有哪些关键字呢?
import keyword
a = keyword.kwlist
print("关键字是 :",a,end=' \n')
print("关键字个数是 :",len(a) )
输入如下:
关键字是 : ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']
关键字个数是 : 35
[Finished in 0.2s]
在Python3.8版本里,现有关键字是35个,不相信的同学可以运行以上代码自己验证,多出的两个关键字是return和del(每个Python版本可能会不一样的,也许会多一点,也许会少一点。)
关键字的用法(使用在哪?适用范围):
1 and、or、not
and、or、not关键字都是逻辑运算符,用法如下:
- and:如果两个语句都返回True,则返回值将仅为True,否则它将返回False。全真则真,有假则全假
- or:如果其中一条语句返回True,则返回值为True,否则它将返回False。全假则假,有真则全真,
- not:如果语句不是True,则返回值为True,否则返回False。
例子:
x = (3>8 and 4<9)
print(x)
x1 = (4<8 and 3>4)
print(x1)
x2 = (3>8 or 4<9)
print(x2)
x3 = (4>9 or 3<8 )
print(x3)
输出的结果:
False
False
True
True
[Finished in 0.2s]
2 if、elif、else:
if、elif、else主要用于条件语句,用法如下:
- if:用于创建条件语句(if语句),并且仅当条件为True时,才允许执行if代码块。
- elif:在条件语句(if语句)中使用,是else if的缩写。
- else:在条件语句(if语句)中使用,并确定在if条件为False时该执行的代码。
-
def func(x): if x < 18: print("未成年") elif x < 30: print("青年") else: print("中老年") func(25) func(15) func(33)
结果如下:
青年
未成年
中老年
[Finished in 0.2s]
其中,else关键字还常在try… except块中使用。
3 for、while
for、while主要用于定义一个循环,用法如下:
- for:用于创建一个for循环,它可以用来遍历序列,例如列表,元组等。
- while:用于定义while循环,while循环将继续,直到while的条件为False。
for循环例子:
name_list = ["zhangsan","lisi","wanger"]
for name in name_list:
print(name)
结果如下:
zhangsan
lisi
wanger
[Finished in 0.1s]
while循环例子(通常while是做无限循环用的):
name_list = ["zhangsan","lisi","wanger"]
while 1>0:
print(name_list)
结果如下(无限循环了):
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
。。。。。。。。。。。略略略
不循环:
name_list = ["zhangsan","lisi","wanger"]
while 1>2:
print(name_list)
结果如下:
无输出,条件为假,print函数不执行
定义一个变量控制循环次数:
name_list = ["zhangsan","lisi","wanger"]
i = 1
while i<=10:
print(name_list)
i +=1
结果如下:
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
['zhangsan', 'lisi', 'wanger']
[Finished in 0.2s]
4 True、False
True、False是比较操作返回的结果,用法如下:
- True:关键字True与1相同。
- False:关键字False与0相同。
示例:
print(1<2)
print(1 in(11,101))
print(1 == 1)
结果如下:
True
False
True
[Finished in 0.2s]
5 continue、break
continue、break主要用在for循环和while循环中,用法如下:
- continue:continue关键字用于在for循环(或while循环)中结束当前迭代,并继续进行下一个迭代。
- break:break关键字用于中断for循环或while循环。
for循环:
for i in range(10,20):
if i<=15:
continue
print(i)
pass
结果如下:
16
17
18
19
[Finished in 0.2s]
6 pass
pass语句用作将来代码的占位符。当执行pass语句时,不会有任何影响,只是占位作用代表空白代码,但是,如果你不写任何东西,就会报错。循环,函数定义,类定义或if语句中不允许使用空代码的时候,则可以使用pass。注意,这个仅仅是占位的作用,没有其它深意。
还是以上面的for循环为例,多写两个pass,对程序没有任何影响:
for i in range(10,20):
if i<=15:
continue
print(i)
pass
pass
写一个空方法:
def func():
pass
写一个空方法,并调用它:
def func():
pass
print("hello,world")
pass
func()
结果如下:
hello,world
[Finished in 0.1s]
7 try、except、finally、raise
try、except、finally、raise都是与异常有关的关键词,用法如下:
- try:在try…except块中使用,它定义了一个代码块,并在没有问题的情况下执行块。如果包含任何错误,可以为不同的错误类型定义不同的块。
- except:在try… except块中使用。 如果try块引发错误,并在有问题的情况下执行对应的代码块。
- finally:在try…except块中使用。它定义了一个代码块,当try…except…else块结束时,该代码块将运行。无论try块是否引发错误,都将执行finally代码块。
- raise:raise关键字用于引发异常,可以定义引发哪种错误,以及向用户显示错误信息。
这几个关键字是异常处理操作使用的关键字,也可以看做是程序流程控制的关键字,如果异常乱抛,或者不抛,会造成非常严重的后果(程序表面正常,但bug可能就会出现了。)
8 import、from、as
import、from、as均与模块的导入有关,用法如下:
- import:用于导入模块。
- from:用于从模块中导入指定的部分,按需要导入指定子类或函数,减少不必要的资源浪费。
- as:用于创建别名。
导入自定义模块或者Python内置模块的专用关键词,在语法高级阶段,是需要常常使用的哦。
9 def、return
def、return均与函数有关的关键字,用法如下:
- def:用于创建(或定义)一个函数。
- return:用于结束所定义的函数,并返回值。
例子如下(pass是无关的,可忽略):
def func(a,b):
pass
return a*b
print(func(a=2,b=18))
结果如下:
36
[Finished in 0.1s]
10 class
class关键字用于创建(或定义)一个类。
示例如下(创建了一个persion类,该类有两个属性,name和age属性,然后引用该类,并打印它的属性):
class Persion:
name = "zhangsan"
age = 10
p =Persion()
print(p.name,p.age)
结果如下:
zhangsan 10
[Finished in 0.2s]
11 lambda
lambda关键字用于创建一个 “匿名函数”。这个函数是无名的,也通常叫做lambda表达式。
lambda是一种简化写法的函数体,适用于写一些小体量的一次性函数,避免污染环境,同时也能简化代码。具体用法好像得单独开一篇文章详细讲解。
12 del
在Python中,一切皆对象。del关键字主要用于删除对象,还可以用于删除变量,列表或列表的一部分等。
例子---定义了一个变量a,然后删除了这个变量a,在打印测试这个变量a,报错,变量没有定义:
a = 111
del a
print(a)
结果如下:
Traceback (most recent call last):
File "/test2.py", line 3, in <module>
print(a)
NameError: name 'a' is not defined
13 global、nonlocal
global关键字用于创建一个全局变量。nonlocal关键字用于声明一个非局部变量,用于标识外部作用域的变量。
例子:
global a
a = 123
print(a)
def func1(a,b):
return a+b
c = func1(a,22)
print(c)
global是全局的意思,因此,此关键字起到声明的作用,先声明一个变量 a是全局变量,然后打印变量a的值,当然, 此变量在其它的函数内可以直接引用咯。
结果如下:
123
145
[Finished in 0.1s]
可以看到,即使func1这个函数没有定义a的值,而是直接引用,参数依然正确的被传导。但需要注意的是,全局变量的定义一定要慎重再慎重,因为,如果自定义的变量非常多的时候,你并不能保证你定义的变量是否是需要引用的那个。
14 in、is
in、is这两个关键字大家一定要区别开来,用法如下:
- in:一方面可以用于检查序列(list,range,字符串等)中是否存在某个值。也可以用于遍历for循环中的序列。
- is:用于判断两个变量是否是同一个对象,如果两个对象是同一对象,则返回True,否则返回False。要与== 区别开来,使用==运算符判断两个变量是否相等。
in最常出现在for循环遍历数组,字符串等等情况下,这里就不多解释,is和==比较类似,需要多加理解,示例如下:
a = 5.0
b = 5.0
print(a is b)
print(a == b)
结果如下:
True
True
[Finished in 0.2s]
(由于我是在IDE下运行的,因此,都是true,如果是在交互模式,比如,python idle下运行,结果是会不同的,is比较的是两个对象,对象只要内存地址不同,就会认为是不同的,也就是false,==是仅仅比较两者的数值,是进行数值计算的。)
15 None
None关键字用于定义一个空值(根本没有值),与0,False或空字符串不同。 None是其自身的数据类型(NoneType),只能为None。这里没什么好说的,只要记住是None 大写就行了,而不是none。
16 assert
调试代码时,使用assert关键字。主要用于测试代码中的条件是否为True,如果为False,将引发AssertionError,也就是俗称的预言,断言。
17 with
with常和open使用,用于读取或写入文件。使用了with这个关键字的语句也通常叫做with语句。
例子---打开/etc/passwd 文件:
with open('/etc/passwd','r') as f:
print(f.read())
结果如下:
略略略。。。。。。。。。
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
[Finished in 0.1s]
18 yield
yield关键字结束一个函数,返回一个生成器,用于从函数依次返回值。
例子:
def func3():
yield 4
func3()
print(func3())
print(next(func3()))
结果如下:
<generator object func3 at 0x7ff687cbc200>
4
[Finished in 0.1s]