二、玩转Python语法(一):面向过程
1.Python的七十二变
1.1 Python中的注释
🚩代码的注释:显然,对于咋们大多数人而言,看中文要比看英文舒服的多,注释的作用就是:给别人简明扼要的翻译一下你写的代码的含义,注释由 # 开头,具体的注释内容写在后面,比如我们给我们写的demo1加上注释:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/5 9:18 # 欢迎大家关注AIoT相关博客~ print('hello world') # 这是一个输出语句 # 输出的结果是 hello world
至此我们也知道了为什么在*4.4 PyCharm的一些配置 中说的必须加上 #
,说白了 #
的作用就是使 #
后的这一行的所有内容 失效,即我们的 PyCharm 在进行运行代码的时候会自动 屏蔽 掉 #
后本行的内容,故对于 #
后本行的内容只有我们程序员看源码的时候才能看到,我们的计算机是不会看到的,这就是所谓的 注释
⁉️读者可能有疑惑:什么情况下需要加注释呢?如果每一条语句都需要加注释的话,那么我们写代码的速度不就被大大降低了么?而且我自己写的代码我肯定能看的懂啊,如此来说,加注释不就显得很多余了么?
🎯确实,对于每一行代码都需要加上注释的话,那么我们写代码的速度会被大大降低,而且会很没必要,就如我们的第一个代码:输出hello world,其实作为程序员的我们都知道这个语句的含义,那么这就完全没必要加注释了,同学们需明确一点,在我们现在或者未来的工作中,我们写代码首先是写给自己看,其次是写给同事或者是后人去看,为了在未来我们写的代码易被维护,故我们需要在一些必要的位置加上注释,而且千万不要认为自己写过的代码一定能看懂,随着以后代码量的不断加大,很有可能今天写的代码过一两天再看就很难看懂含义,故学会加注释,是一个很好的习惯,这里拿下述代码去举例:
❗️ 注:下述代码是为了让大家理解注释的作用,不需要看懂
while (n != 0): if sever!= h and server != '*': if type != 'REQ': continue if type != 'DIS' and type != 'REQ': continue if (server == '*' and type != 'DIS') or (server == h and type == 'DIS'): continue update_ips_state(tc) if type == 'DIS': k = get_ip_by_owner(client) if not k: k = k=get_ip_by_state(0) if not k: k = k=get_ip_by_state(3) if not k: continue ip[k].state = 1 ip[k].owner = client if not te: ip[k].t = tc + t_def
这段代码不论是给谁去看都会觉得很是头大😡,在这里,就体现出注释的重要性了,我们给下面代码加上注释:
while (n != 0): if sever!= h and server != '*': if type != 'REQ': continue if type != 'DIS' and type != 'REQ': # 发*一定对应dis,但是给服务器发一定不与DIS对应 continue if (server == '*' and type != 'DIS') or (server == h and type == 'DIS'): continue # 更新ip地址池的状态 update_ips_state(tc) # 传入当前时刻 # 处理DIS if type == 'DIS': # 检查是否有占用者为发送主机的 IP 地址: # 如果有,选取该 IP 地址; k = get_ip_by_owner(client) # 若无,则选最小的状态为未分配的 IP 地址; if not k: k = k=get_ip_by_state(0) # 0代表未分配 if not k: k = k=get_ip_by_state(3) # 3代表过期 # 若无,则不处理该报文 if not k: continue # 占用者设置为发送主机; ip[k].state = 1 # 该 IP 地址状态设置为待分配 ip[k].owner = client # 占用者设置为发送主机; # 报文中过期时刻为 0 ,则设置过期时刻为 t + t_def; if not te: ip[k].t = tc + t_def
这样看来,复杂的代码一下就显得十分的直观易读了,这就是注释的作用
能看出,在 Python 中 #
可以进行单行注释,下面来简单介绍多行注释,我们将一对三引号之间的代码称为多行注释
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/5 9:18 # 欢迎大家关注AIoT相关博客~ ''' 在三引号之间的内容均为注释内容 这部分内容同样会被Python解释器忽略掉 我们可以在三个引号之间写任意多的东西 ''' print('hello world')
1.2 Python中变量的定义
*1.2.1 标识符和保留字
注:本小节带 *,不需要进行学习,可以简单进行了解
⛲️保留字:有一些特殊的单词被我们赋予了特殊的含义,我们在给对象进行命名的时候不可以使用这些名字,我们可以使用如下函数去查看我们的保留字有哪些:
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/6 15:05 # 欢迎大家关注AIoT相关博客~ import keyword print(keyword.kwlist) ''' 输出结果(保留字)如下列出 ['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'] '''
以上这些完全没必要去记,我们只需要明白一点:在 Python 中我们命名对象的时候有些字符是不能作为对象名的,这些特殊的名字只要我们使用其实 PyCharm 就会自动给我们报错
⛲️标识符:
变量、函数、类、模块和其它对象的起的名字就叫标识符,我们对标识符有如下命名的规则:
标识符可由:字母、数字、下划线_,以上三部分任意排列组合去组成
不能以数字开头
不能是保留字
标识符是严格区分大小写的
# 博主:辰chen # 博客地址:https://chen-ac.blog.csdn.net/ # 开发时间:2021/12/6 15:05 # 欢迎大家关注AIoT相关博客~ # 由数字,字母,下划线_ 组成 a_b = 1 a1 = 2 _a = 3 # 不能以数字开头 2_a = 4 # 会报错 # 不能是保留字 if = 2 # 会报错 # 严格区分大小写,以下是两个不同的标识符 b = 1 B = 1
1.2.2 变量的定义和使用
我们可以理解变量为:在内存中带有标签的小盒子,变量的使用规则为:变量名 = 值,其中=被我们称为赋值运算符,它的作用为:把=右边的值付给左边的变量名,变量名的命名就是我们上述的标识符的命名规则:
标识符可由:字母、数字、下划线_,以上三部分任意排列组合去组成
不能以数字开头
不能是保留字
标识符是严格区分大小写的
如下就是一个简单的变量的赋值:
❗️ 注:下面的代码使用了 print() 函数,后续会有讲解,读者这里只需要知道 print() 的含义是输出的意思即可
name = '辰chen' # 把字符串'辰chen'赋值给 name print(name)
运行结果就是输出了辰chen,当然我们还可以有很多的赋值(比如把一个整数赋值给一个变量,亦或者把一个小数赋值给一个变量),下面我们再学习了 Python 中的数据类型后读者可以自行尝试
关于变量名,虽然我们可以任意的去取名,但我们尽量在命名的时候做到见名知意,比如我们如果用一个变量记录最终的答案结果的话,我们建议命名为res
,即单词result
的缩写,如上代码,在表示一个人的名字的时候,我们建议使用name
去当变量名
如果对同一个变量连续的赋值,那么我们最终输出的时候只会输出最后一次赋值的结果:
a = 2 a = 3 a = 5 print(a)
即对于如上代码,我们对于变量a
依次赋值为2 3 5
,最终我们输出a
的值只有5
,读者可以自行验证