Python基础语法
1. Python有哪些特点和优点?
- 优点:1) 语法简单 2)开源的 3)免费的 4)高级语言 5) Python 是解释型语言,能跨平台 6) Python 是面向对象的编程语言 7)Python 功能强大(模块众多)8)Python 可扩展性强
- 缺点:1)运行速度慢 2)代码加密困难
2. 简述解释型和编译型编程语言?
- 解释型语言
- 定义:使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。
- 特点:解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。
- 总结:
(1)解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
(2)只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
(3)Python等属于解释型语言。
- 编译型语言
- 定义:使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。
- 特点:在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。
- 总结:
(1)一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
(2)与特定平台相关,一般无法移植到其他平台;
(3)现有的C、C++、Objective等都属于编译型语言。
3. Python解释器种类以及特点
- CPython:由C语言开发的python解释器,也是标准的python解释器,是使用最广泛的python解释器。
- JPython:运行在Java上的解释器。可以将python源码编译成JVM字节码,由JVM执行对应的字节码,因为可以很好的与JVM集成。
- IPython:是基于Cpython之上的一个交互式解释器。
- PyPy:是使用python实现的python动态编译器,提供了JIT编译器和沙盒功能,因此在运行速度上要比Cpython快很多。其起源是python开发者为了更好的Hack Python而创建的项目。灵活性高、易于使用和试验,不过对于第三方模块的支持不足。
- IronPython:面向微软.net平台,是由C#语言编写。可以将Python代码编译成字节码TODO CLR,并能很好的与.NET平台集成。
4. python常见的PEP8规范
- 1、使用4个空格缩进,不要使用制表符;
- 2、使用拆行符(\)以确保每行不会超过79个字符;
- 3、空格的使用:总体原则是避免不必要的空格。
- 1) 各种右括号前不要加空格。
- 2) 逗号、冒号、分号前不要加空格。
- 3)函数的左括号前不要加空格。如Func(1)。
- 4)序列的左括号前不要加空格。如list[2]。
- 5) 操作符左右各加个空格,不要为了对齐增加空格。
- 6) 函数默认参数使的赋值符左右省略空格。
- 4、注释部分:为让代码具有更高的可读性。
- 1)行注释:跟代码至少有两个空格分离,注释由“#”号和一个空格开始;
- 2)函数、类等块注释:通常跟随其定义做注释,可以是“#”号或者三引号注释;
- 3)文件注释:一般使用三引号注释,写下文件顶部,但是声明之下。主要是为了文件内容的注解;
- 5、模块和包的相关规范
- 位置:导入在文件顶部,在文档注释之后,在模块全局变量之前;
- 导入顺序:优先标准库导入,然后相关第三方库导入,最后是本地应用库导入;
- 导入注意:尽量不要在import后一次引入多个包;
- 6、命名规范
- 变量命名:不要用字母"l""(小写的L)“O”(大写的O)作为单字符变量,在某些字体里面无法和数字0和1区分;
- 函数命名:函数名应该小写,用下滑线分割;
- 类命名:一般使用首字母大写的约定;
- 包和模块的命名:模块的命名要短,使用小写,避免使用特殊字符,尽量保持模块名简单,无需分开单词命名;
- 常量命名:通常定义与模块级别并且所有的字母都是大写、单词用下划线分开;
- 7、项目结构介绍
- readme:对项目的整体介绍,同时也是一份使用手册,需要时常维护更新,通常为README.md;
- logs: 专门存放项目运行日志的地方;
- setup.py:通过setup把核心代码打包发布;
- sample:存放项目核心代码,项目主题名目录;
- requirements.txt:存放该项目所有依赖的第三方库
- docs:包的参考文档
- tests:所有的代码测试都存在于该目录下
- makefile:用于项目的命令管理,根据项目需求添加其他文件和目录;
5. 通过代码实现进制转换
# 其他进制转换为十进制
# 1:二进制——>十进制
print("二进制转换为十进制的结果为:",0b100111) # 39
# 2:八进制——>十进制
print("八进制145转换为十进制结果为:",0o145) # 101
# 3.十六进制(HEX)——>十进制
print("十六进制转换为十进制的结果为:",0x154EF) # 87279
# 十进制转换为其他进制
# 1:十进制——>二进制
print(bin(3)) # 0b11
# 2:十进制——>八进制
print(oct(12)) # 0o14
# 3:十进制——>十六进制
print(hex(18)) # 0x12
6.三元运算规则以及应用场景
- 三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值
- 三元运算符的功能与’if…else’流程语句一致,它在一行中书写,代码非常精炼,执行效率更高
格式:[on_true] if [expression] else [on_false] res = 值1 if 条件 else 值2
7.列举 Python2和Python3的区别
- 整数:python2中区分整型(int)和长整型(long),python3不区分
- python2中没有f 标志位格式化,python3才有
- python3里面,True和False都是关键字,python2里面不是
- python2中的整数相除属于地板除,要想真除就得变成浮点数 python3中的整数相除就是真除
- python2的编码是ascii码,python3的默认编码是utf-8
- 在python包结构目录里 python2 :init.py 是必须的 python3 :init.py 是可选的
- 在导入模块运行时 python2 只会在模块同级目录下生成.pyc文件 python3 生成__pycache__目录
- 输出的差异:
- python2的print不一定要求函数形式使用
- python2 可以使用 print “hello”的方式输出,(print “hello”)
- python3的print强制是函数(print(“hello world”))
- 输入的差异:
- python3中input得到的数据都是str型
- python2中input默认是int型,str要使用引号包裹,raw_input得到的都是str
- range和xrange
- python2:range(0,4) -->结果:[0,1,2,3]
- xrange(0,4) -->结果:是一个可迭代对象(惰性求值,使用的时候再生成)
- python3:没有xrange,range函数就是python2中的xrange
- 异常捕获的差异:
- python2:except exception,e:
- python3:except exception as e:
- 关于新式类和经典类的区别
- python2里面只有继承了object的类才是新式类,其他的是经典类
- python3里面默认所有类都是继承的object,所以python3都是新式类
8.is和==的区别
- is 用于判断 两个变量 引用对象是否为同一个
- == 用于判断 引用变量的值 是否相等
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> b is a
False
>>> b == a
True
9.如何在python中写注释?
- 单行注释:单行注释常以#开头
- 多行注释:Python中多行注释使用三个单引号(’’’)或者三个双引号(”””)来标记
- 编码注释:需进行编码声明,如采用UTF-8编码,需在源码上方进行# -- coding:UTF-8 --声明,从Python3开始,Python默认使用UTF-8编码,所以Python3.x的源文件不需要特殊声明UTF-8编码。
- 平台注释:如果需要使Python程序运行在Windows平台上,需在Python文件的上方加上#!/usr/bin/python注释说明。
10. python中是否需要缩进?
需要。Python指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。通常使用四个空格字符来完成。如果开发者的代码没有缩进,Python将无法准确执行并且也会抛出错误。
11.什么是Python中的文档Docstrings?
docstring在python之中叫做文档字符串或者是说明文档,它既是PEP257文档字符串规范,也是一种代码编写时的语法。docstring简单来说就是一个在函数、类型、方法、模块定义时写在代码第一行的注释。虽然它在代码中的表现形式为注释,但是它实际上会被python解析器视为该对象的__doc__属性。
12.Python是通用编程语言吗?
Python 是一种流行的通用编程语言,具有广泛的应用程序。
13. Python是如何解释语言的?
Python是一种解释性语言,它的源代码可以直接运行。Python解释器会将源代码转换成中间语言,之后再翻译成机器码再执行。
14.Python中的命名空间是什么?
在Python中,所有的名字都存在一个空间中,它们在该空间中存在和被操作——这就是命名空间
15.什么是PYTHONPATH?
Python路径(实际上是PYTHONPATH)是一个环境变量。
16.Python中的局部变量和全局变量是什么?
- 局部变量:在函数内部申明的变量,只能在函数内部调用,超过使用范围就会报错。
- 全局变量:就是在整个python文件中申明的变量,可以在全局使用。
- 如果局部变量和全局变量名相同,优先使用局部变量
- 正常情况下,全局变量可以在局部进行查看(print),但是不能用于修改,如果想在局部使用全局变量,需要通过global
- 局部变量的全局使用,需要通过global
重要:在函数中定义的局部变量想要全局调用时,只有不可变参数需要加global!!!
17.try except用法和作用
在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过程中对语法进行检测,出错后发出异常消息)、数据除零错误、从未定义的变量上取值等;而try/finally语句则主要用于在无论是否发生异常情况,都需要执行一些清理工作的场合,如在通信过程中,无论通信是否发生错误,都需要在通信完成或者发生错误时关闭网络连接。
18.Python LEGB规则
LEGB含义解释:
L-Local(function);函数内的名字空间
E-Enclosing function locals;外部嵌套函数的名字空间(例如closure)
G-Global(module);函数定义所在模块(文件)的名字空间
B-Builtin(Python);Python内置模块的名字空间
LEGB规定了查找一个名称的顺序为:local–>enclosing function locals–>global–>builtin
19.python简单的列表去重
- 一、使用for循环实现列表去重,此方法去重后,原顺序保持不变。
# 使用for循环实现列表去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = []
for l1 in list1:
if l1 not in list2:
list2.append(l1)
print(list2)
结果:[‘a’, ‘b’, 1, 3, 9]
- 二、使用列表推导式去重,此方法去重后,原顺序保持不变。
# 使用列表推导式去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
res = []
[res.append(i) for i in list1 if i not in res]
print(res)
结果:[‘a’