活动地址:CSDN21天学习挑战赛
活动地址:CSDN21天学习挑战赛
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版本可能会不一样的,也许会多一点,也许会少一点。)
关键字的用法(使用在哪?适用范围):
and、or、not关键字都是逻辑运算符,用法如下:
例子:
- 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主要用于条件语句,用法如下:
- 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块中使用。
for、while主要用于定义一个循环,用法如下:
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]
True、False是比较操作返回的结果,用法如下:
示例:
- print(1<2)
- print(1 in(11,101))
- print(1 == 1)
结果如下:
- True
- False
- True
- [Finished in 0.2s]
continue、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]
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]
try、except、finally、raise都是与异常有关的关键词,用法如下:
这几个关键字是异常处理操作使用的关键字,也可以看做是程序流程控制的关键字,如果异常乱抛,或者不抛,会造成非常严重的后果(程序表面正常,但bug可能就会出现了。)
import、from、as均与模块的导入有关,用法如下:
导入自定义模块或者Python内置模块的专用关键词,在语法高级阶段,是需要常常使用的哦。
def、return均与函数有关的关键字,用法如下:
例子如下(pass是无关的,可忽略):
- def func(a,b):
- pass
- return a*b
- print(func(a=2,b=18))
结果如下:
- 36
- [Finished in 0.1s]
class关键字用于创建(或定义)一个类。
示例如下(创建了一个persion类,该类有两个属性,name和age属性,然后引用该类,并打印它的属性):
- class Persion:
- name = "zhangsan"
- age = 10
- p =Persion()
- print(p.name,p.age)
结果如下:
- zhangsan 10
- [Finished in 0.2s]
lambda关键字用于创建一个 “匿名函数”。这个函数是无名的,也通常叫做lambda表达式。
lambda是一种简化写法的函数体,适用于写一些小体量的一次性函数,避免污染环境,同时也能简化代码。具体用法好像得单独开一篇文章详细讲解。
在Python中,一切皆对象。del关键字主要用于删除对象,还可以用于删除变量,列表或列表的一部分等。
例子---定义了一个变量a,然后删除了这个变量a,在打印测试这个变量a,报错,变量没有定义:
- a = 111
- del a
- print(a)
结果如下:
- Traceback (most recent call last):
- File "/test2.py", line 3, in
- print(a)
- NameError: name 'a' is not defined
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的值,而是直接引用,参数依然正确的被传导。但需要注意的是,全局变量的定义一定要慎重再慎重,因为,如果自定义的变量非常多的时候,你并不能保证你定义的变量是否是需要引用的那个。
in、is这两个关键字大家一定要区别开来,用法如下:
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,==是仅仅比较两者的数值,是进行数值计算的。)
None关键字用于定义一个空值(根本没有值),与0,False或空字符串不同。 None是其自身的数据类型(NoneType),只能为None。这里没什么好说的,只要记住是None 大写就行了,而不是none。
调试代码时,使用assert关键字。主要用于测试代码中的条件是否为True,如果为False,将引发AssertionError,也就是俗称的预言,断言。
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]
yield关键字结束一个函数,返回一个生成器,用于从函数依次返回值。
例子:
- def func3():
- yield 4
- func3()
- print(func3())
- print(next(func3()))
结果如下:
- 4
- [Finished in 0.1s]