zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python学习之基本语法---语法规则---注释,标识符,关键字,命名规则(二)day8

Python规则学习 基本 --- 语法 关键字 注释
2023-09-14 09:13:15 时间


活动地址: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个,分别是:

FalseNoneTrueandassertasasyncawaitbreakclass
continuedefelifelseexceptfinally'forfromglobalif
importinislambdanonlocalnotorpassraisetry
whilewithyield

如何知道到底有哪些关键字呢?

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]