2024年最全03(1),2024年最新面试时千万不能说的三个大忌

简介: 2024年最全03(1),2024年最新面试时千万不能说的三个大忌


  • 1.标识符
  • 所谓的标识符就是对变量、常量、函数、类等对象起的名字。
  • 首先必须说明的是,Python语言在任何场景都严格区分大小写!
  • Python对于标识符的命名有如下规定:
  • 第一个字符必须是字母表中的字母或下划线‘_’
  • 例如,a, Ak, _set_id, green等都是可以的,但是例如$abc, &_a, ~bashrc, 123abc等是不可以的!
  • 那么,有些同学可能会问, 中文可以吗?很好!我非常喜欢和赞同这种思考和提问的方式,它能帮助你更好的挖掘核心原理。答案是可以的!
  • 比如下面的例子:
>>> 我 = 1  
>>> 我 1 
>>> 什么 = "apple" 
>>> print(什么) apple 
* Python3全面支持Unicode后,对中文的兼容性是越来越好了。居然真的可以用中文做变量名,不信的话,你可以自己在IDLE里试试。
* 然而,虽然支持中文标识符,但是没有人会这么干,我也不建议大家这么做,请将第一个字符必须是字母表中的字母或下划线‘\_’作为原则来执行。
* 另外,以下划线开头的标识符通常都有特殊意义。以单下划线开头的变量,例如\_foo代表禁止外部访问的类成员,需通过类提供的接口进行访问,不能用"from xxx import \*"导入;而以双下划线开头的,例如\_\_foo,代表类的私有成员;以双下划线开头和结尾的(**foo**)是python里特殊方法专用的标识,如\_\_init\_\_()代表类的构造函数。这些在后面会有专门的论述,暂时只要知道它们的特殊性就行了。
* **标识符的其他的部分由字母、数字和下划线组成**
* 也就是说标识符除了首字符不可以是数字外,其它部分还可以包含数字。那特殊字符呢?当然还是不行的啦。所以,a123c\_, bbc, city\_of\_china等等都是可行的,而a&b, king-of-the-world, love@qq.com都是不行的。
* 另外要注意的是,由于l(小写的L)和数字1, 大小写的o与数字0在外观上的相似性,请尽量不要让它们相邻出现,保持语义的清晰性,确保不会发现错误认读的情况。
* 同样,我们继续烧脑,英文中夹塞中文在语法上也是可以的,但绝对不要这么做!
* >>> a这都能行b舅服你 = 100 >>> a这都能行b舅服你 100
* **标识符对大小写敏感**
* 这条是基于Python严格区分大小写的,所以标识符abc与ABC是不同的两个。
* **变量名全部小写,常量名全部大写**
* 这条不能算语法层面的要求,而是代码规范的要求。虽然你可以用PI来表示一个变量,但通常我们都会认为这是代表圆周率的一个常量。
* **函数和方法名用小写加下划线**
* 同样也不是语法强制,而是代码规范,我们在定义一个函数或者方法的名字的时候,请尽量用类似get、set、count\_apple、total\_number之类的命名方式。
* **类名用大写驼峰**
* 也不是语法强制,而是代码规范。所谓的大写驼峰指的是每个单词的首字母大写,组合在一起就像驼峰一样高低高低的排列。例如ThreadMixIn、BrokenBarrierError、\_DummyThread等等
* **模块和包的名字用小写**
* 请尽量小写模块和包的名字,并且不要和标准库以及著名的第三方库同名。
* 最后需要提醒大家的是:
* 变量的命名不要用关键字和内置函数的名字!
* 下面我们就会讲到Python有哪些关键字,而内置函数的知识则要到后面的章节。
* ## 2.Python 保留字
* Python保留字,也叫关键字,是Python语言官方确定的用作语法功能的专用标识符,不能把它们用作任何自定义标识符名称。关键字只包含小写字母。Python的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
* ```
  >>> import keyword 
  >>> keyword.kwlist ['False', 'None', 'True', 'and', 'as', 'assert', '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'] 
  也可以参照下表: 
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Khw8EAvU-1606785524152)(file:///C:/Users/lenovo/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]
  • 那么如果,真的犯了这个错,会怎么样呢?举个例子:
>>> if = 1 SyntaxError: invalid syntax 
>>> print(and) SyntaxError: invalid syntax >>> def = "hi" SyntaxError: invalid syntax 
* 看到没有?直接提示语法错误。
* 除了不能使用关键字作为标识符,前面我们也强调过了,也不能使用内置函数同名的标识符。Python有很多内置函数,以sum为例,这是一个求和的函数,我们看一下错误的命名导致的后果:
* ```
  >>> sum([1,2,3,4]) 10 
  >>> sum = "错误标识符名" 
  >>> sum([1,2,3,4]) Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> sum([1,2,3,4]) TypeError: 'str' object is not callable 
  • 先不管sum([1,2,3,4])的意义,它的作用是把1/2/3/4加在一起得到10,然后错误的给一个变量也取了个sum的标识符名称,再后面又调用sum([1,2,3,4])的时候,程序抛出异常,错误原因是str不是可调用的类型。归根到底就是sum这个名字重名了的原因。
  • 3.注释
  • 我们写的程序里,不光有代码,还要有很多注释。注释有说明性质的、帮助性质的,它们在代码执行过程中相当于不存在,
  • 透明的,不参与任何工作。但在代码维护、解释、测试等等方面,发挥着不可或缺的重要作用。
  • 每一位程序员都要尽量写出高质量的注释。具体的注释专题,有大量的高水平文章和论述,
  • 请自行搜索并学习。这里,我们只讨论Python中注释的方法。
  • 单行注释
  • Python中,以符号“#”为单行注释的开始,从它往后到本行的末尾,都是注释内容。
#!/usr/bin/python3 
#下面这个方法的作用是… 
#第一个注释\* 
#我是单行注释 
#这是一个空的函数,它什么都不干。本条注释也是句废话。 
def main():   
  pass # pass\*\*表示占位,什么都不做。那我为什么要注释它呢???\* 
* **多行注释**
* Python没有真正意义上的多行注释(块注释)语法。你只能在每行的开头打上#号,
* 然后假装自己是个多行注释,囧。(有表情包没?)
* # 第一行注释 # 第二行注释 # 第三行注释 def func(): print(“这是一个悲伤的故事!”)
* **注释文档**
* 在某些特定的位置,用三引号包括起来的部分,也被当做注释。但是,这种注释有专门的作用,
* 用于为\_\_doc\_\_提供文档内容,这些内容可以通过现成的工具,自动收集起来,形成帮助文档。
* 比如,函数和类的说明文档:
* def func(a, b): “”" 这个是函数的说明文档。 :param a: 加数 :param b: 加数 :return: 和 “”" return a + b class Foo: “”" 这个类初始化了一个age变量 “”" def **init**(self, age): self.age = age 需要强调的是这类注释必须紧跟在定义体下面,不能在任意位置。
* ### 4.代码头两行
* 很多时候,我们在一些py脚本文件的开头都能看到类似的以#开头的这样两行代码,它们不是注释,是一些设定。
* ```
 #/usr/bin/env python 
 #coding:utf-8 
  • 第一行:用于指定运行该脚本的Python解释器,Linux专用,windows不需要。env方式下,系统会自动使用环境变量里指向的Python。还有一种方式,#!/usr/bin/python3.6,这会强制要求使用系统中的python3.6解释器执行文件,这种方式不好,一旦你本地的Python3.6版本删除了,会出现找不到解释器的错误。无论两种方式的哪一种,都指的是在linux下使用./test.py的方式执行脚本时的设置,在使用类似python test.py或者python3 test.py的执行方式时,这一行不起作用。
  • 例如,我写了个脚本如下:
  • #!/usr/bin/python2 print “hello” # 注意这里没有圆括号,这是python2版本的打印方式
  • 仔细看下面的执行过程, 你会发现无论你在代码第一行怎么设置,都会根据命令调用的时的python版本进行执行:
[feixue@feixue-VirtualBox: ~/python]$ cat test.py #!/usr/bin/python2 print "hello" [feixue@feixue-VirtualBox: ~/python]$ python2 Python 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> exit() [feixue@feixue-VirtualBox: ~/python]$ python3 Python 3.6.1 (default, Aug 15 2017, 11:19:20) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() [feixue@feixue-VirtualBox: ~/python]$ python2 test.py hello [feixue@feixue-VirtualBox: ~/python]$ python3 test.py File "test.py", line 3 print "hello" ^ SyntaxError: Missing parentheses in call to 'print' 那这行有什么用呢?是这么用的。 [feixue@feixue-VirtualBox: ~/python]$ chmod +x test.py [feixue@feixue-VirtualBox: ~/python]$ ll test.py -rwxrwxr-x 1 feixue feixue 34 9月 5 22:57 test.py* [feixue@feixue-VirtualBox: ~/python]$ ./test.py hello 
* **第二行**:代码的编码方式。**不是程序要处理的数据的编码方式,而是程序自己本身的字符编码**。在Python3中,全面支持Unicode,默认以UTF-8编码,我们不用再纠结中文的问题,乱码的问题,所以本行其实可以不需要。但在Python2中,对字符的编码是个非常令人头疼的问题,通常都需要指定这么一行。如果要自定义别的编码类型的话,可以像这样:# -*- coding: cp-1252 -*-,但如果没有强制需求的话,不要自己作死,请坚持使用utf-8编码。
* 这两行要在文件的顶行,顶左,不要空格和空行, utf8和utf-8都行。
* PS:这里的-\*-是什么意思呢?没意思,装饰美观好看而已,囧。
* 除了这两行,有时候我们还会附上作者、通讯地址、版权说明,版本说明等,全凭个人喜好了。
* ## 5.语句与缩进
* **语句**:在代码中,能够完整表达某个意思、操作或者逻辑的最短代码,被称为语句。语句通常不超过一行,超过一行的称为多行语句。
* 像下面的都称为语句:
* a = apple from . import modles print(“haha”) lis.append(item)
* **Python的标准语句不需要使用分号或逗号来表示语句结束,简简单单的换个行就表示本语句已经结束,下一句开始。**
* **代码块**:为完成某一特定功能而联系在一起的一组语句构成一个代码块。有判断、循环、函数、类等各种代码块。代码块的首行通常以关键字开始,以冒号( : )结束。比如:
* # 这是一个判断流程代码块 if expression : pass elif expression : pass else : pass 又比如: # 这是一个类代码块 class Foo: def **init**(self, name, age): self.name = name self.age = age def get\_name(self): return self.name # 这是一个函数代码块 def func(a, b): summer = a+b return summer\*2
* Python最具特色的语法就是**使用缩进来表示代码块**,
* 不需要使用大括号({})。
* 缩进的空格数是可变的,但是**同一个代码块的语句必须包含相同的缩进空格数**。
* 如果缩进数的空格数不一致,会抛出缩进异常(请记住IndentationError这个异常名!新手会经常和它做朋友):
**(1)Python所有方向的学习路线(新版)**  
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/1f807758e039481fa866130abf71d796.png#pic_center)
**(2)Python学习视频**
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)
**(3)100多个练手项目**
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**


相关文章
|
4月前
|
存储 索引 关系型数据库
面试准备
【8月更文挑战第2天】
67 10
|
消息中间件 NoSQL Java
面试多起来了
面试多起来了
65 0
面试多起来了
|
消息中间件 算法 前端开发
如何搞砸一场面试?
如何搞砸一场面试?
66 0
|
缓存 JavaScript 网络协议
面试(3)
面试(3)
|
前端开发 安全 搜索推荐
【面试总结2】2
【面试总结2】
|
SQL 安全 前端开发
面试总结
集合,线程
104 0
Zp
|
存储 SQL 关系型数据库
面试系列文章
面试系列文章
Zp
82 0
|
存储 C++ 索引
C++面试问题准备
C++面试问题准备
239 0
|
存储 安全 前端开发
面试中的那些坑[答疑 | 篇四]
面试中的那些坑[答疑 | 篇四]
面试中的那些坑[答疑 | 篇四]