python基础部分

2019-03-07  本文已影响0人  鬼泣_89b6

C、C++、C#、Java、php、python语言的内在特性及区别

        参考:https://blog.csdn.net/zllzb2011/article/details/47169479

一般而言 C、C++、Java被视为同一系语言,他们长期占据着程序使用榜前三名

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,与传统程序不同 Java语言是个简单 面向对象 分布式 解释性 健壮 安全与系统无关 可移植 高性能 多线程和动态的语言

Python 是一种面向对象 直译式计算机程序设计语言,python语法简介而清晰,具有丰富和强大的类库,可以把其他语言制作成模块,连接在一起

        python是完全面向对象的语言.并且完全支持继承,重载\派生\多继承 有益于增强源代码的复用性

        python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。

PHP 中文名:超文本预处理器 是一种通用开元脚本语言语法吸收了C语言 Java的特点,入门门槛低,易学习,使用广泛

        与其他程序相比,PHP是将程序嵌入到HTML文档中执行,执行效率比CGI要高许多,所有CGI的功能PHP都能实现,PHP支持所有流行的数据库以及操作系统,最重要的是PHP可以用C C++进行程序扩展

编译型语言和解释型语言的区别

编译型:将代码一次性全部编译成二进制,然后再运行。

         优点:执行效率高。 (将代码一次性全部编译成二进制)

         缺点:开发效率低

        代表语言:C语言

解释型:代码逐行解释,解释成二进制,然后运作。

        优点:开发效率高

        缺点:执行效率低 (代码逐行解释)

  代表语言:python

python解释器的种类以及特点

Cpython C语言开发的使用最广泛解释器

IPython 基于Cpython之上的一个交互式计时器 交互方式增强功能和CPython一样

PyPy 目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率

JPython 运行在Java上的解释器 直接把python代码编译成Java字节码执行

IronPython 运行在微软 .net 平台上的解释器,把python代码编译成 .net的字节码

列举python2和python3的区别

  参考:https://blog.csdn.net/pangzhaowen/article/details/80650478

1、 python3 对 Unicode 字符的原生支持,所以只有string(文本字符串) 一种类型,字节序列用byte表示

       python2中使用ASCII码作为默认编码方式 导致string有两种类型str(字节序列) 和Unicode(文本字符串)

2、 python3采用绝对路径的方式进行import 导入

        python2 采用相对路径的方式进行import 导入 这样使标准库导入变得困难

3、  python3统一采用新式类。

        python2存在老式类和新式类的区别,新式类声明要求继承object 必须用新式类应用多重继承

4、  python2源码不规范,混乱,重复 python3 重整源码后代码优美,清晰简单

5、python2中 range代表自定义的数字列表,xrange代表可迭代对象

        python3中仅有range,直接代表可迭代对象

6、 python2 中没有定义nonlocal    python3中弄nonlocal 表示将局部变量更改

    global:声明一个全局变量。在局部作用域想要对全局作用域的全局变量进行修改,需要global(可变类型的不需要)

    nonlocal:在局部作用域中,对父级作用域(或者更外层的非全局作用域)的变量进行引用和修改,并且引用的那一层,从那一层以下,此变量全部发生改变

7、Python2支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数)

    但是python3则将 long 和 int 类型合并,只有int类型

python2项目如何迁移成python3项目

介绍一个python自带的工具2to3 它就在scripts目录下

1、如果在window系统中使用命令会有点麻烦,首先找到python的所在目录,并进入

2、找到你要转化的目录,次数可以是单个文件也可以是一个目录

C:\WINDOWS\system32> cd C:\ProgramData\Anaconda3\Scripts              找到2to3

C:\ProgramData\Anaconda3\Scripts>  .\2to3.exe -w  E:\xxx\xxx.py             进行转化

没有-w命令好像就只是列出修改内容而不修改,加上-w后执行修改而且会多出一个.bak文件保留原来的版本

还有其他命令选项

        -f选项钦定了只使用某几个规则进行转换其余忽略,

        -x 选项与之相反,排除某个规则不做转换。规则的名字需按文档列出的写

        另外文档指出有些规则需要显式的(explicit)指定才可执行

2to3 -f imports -f has_key example.py

        -o 或 --output-dir 指定输出文件目录,

        -W 或 --write-unchanged-files顾名思义,没有可改的也要输出

        -v可以输出更多信息,

        -add-suffix 可以在输出文件名末尾加后缀

python中 is 和 == 的区别

python中的对象包含三要素:id type value

其中id 用来标识唯一一个对象,type 标识对象的类型, value是对象的值

is 是判断 a对象是否就是 b 对象 是通过id 进行判断的

== 是判断 a对象的值是否和b对象相等,是通过value来判断的

PEP8规范

参考:https://www.jianshu.com/p/ffcc66bab3ce

缩进      

            每一级应缩进4个空格

            行的最大长度  最大字符数为79 如果没有结构化限制的大块文本(注释),每行字符在72

空行    

            顶层函数和类的定义 前后两个空行

            类的方法定义 用一行隔开

import导入  

                    通常要分开导入

                    位于文件的顶部

                    导入顺序: 标准库  第三方库  本地库  (每一组之间加入空行)

                    推荐使用绝对路径导入

注释

                    当代码更改时,优先更新对应的注释

                    行内注释 是# 加 一个空格

ascii  unicode  gbk  utf-8 的区别

ASCII 在计算机诞生之初就出现了,内容包括特殊字符,数字,字母

    在当时用8位(1字节)表示1字符 【8位中的第一位是预留位,都是0】

Unicode 万国码 (希望将所有国家的文字用二进制表示)

    创建初期 用16位(2字节)表示1字符,后来发现不够就进行了升级用32位(4字节)表示1字符

    但是这样会有一个很蛋疼的问题,资源的浪费所以不同的国家对Unicode进行了升级

utf-8:最少用8位(1字节)表示一个字符

    字母,数字,特殊字符用一个字节表示

    欧洲文字用两个字节表示

    亚洲文字用三个字节表示

gbk(国家标准):中国针对Unicode进行的改良与utf-8没有太多关系

    注意:Unicode是继承了ASCII码,而utf-8和gbk都是通过Unicode改良的,所以,在一定程度上(数字字母,特殊字符)utf-8和gbk是互通的

    字母用一个字节表示

    汉字用两个字节表示

字节码和机器码的区别

参考:https://www.jianshu.com/p/9f1902de3fcb

机器码(machine code):也叫原生码,是电脑的CPU可以直接解读的数据

    通常意义上理解,机器码就是计算机可以直接执行,并且执行速度对快的代码,但是非常晦涩难懂,也比较难编写,一般人员接触不到

字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

    可以说:字节码是一种中间状态(中间码),的二进制代码(文件)需要直译器转译后才能成为机器码

python中的三元表达式  

表达式1 if 条件表达式 else 表达式2

当表达式返回True时,返回结果表达式1,否则返回结果表达式2。

示例:    c = a if a < b else b

文件操作时:readlines 和 xreadlines 的区别是

返回值不同,但使用方法相同

f = open('./test.txt')

f = open('.\te.text')

for r in f.readlines()            for x in f.xreadlines()

print(r)  # 返回列表                print(x) # 返回生成器 python2中存在xreadlines

f.close()  # 关闭文件句柄

什么是反射,以及应用场景

反射:利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

应用场景:在web框架里经常被使用

简述python的深浅拷贝

赋值:数据完全共享

    注意,这里有一个坑

        如果数据是可变类型,比如列表,修改其中一个,则另一个必定改变

        如果是不可变类型,比如字符串,修改了一个,另一个并不会改变

s = '你好' 

d = s 

print(d,s) # 你好 你好

d = '哈哈哈' 

print(d,s) # 哈哈哈 你好

拷贝:原则上就是把数据分离出来,复制其数据

    浅拷贝:仅仅拷贝第一层,第二层开始进行数据共享 注意:切片也是浅拷贝

    深拷贝:将数据完完全全赋值一份放到另一个内存中

python的可变类型和不可变类型的区别

可变类型(mutable):列表,字典

不可变类型(unmutable):数字,字符串,元组

        这里的可变不可变,是指内存中的那块内容(value)是否可以被改变。如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请一块区域(因为老区域#不可变#)。

        如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。

        可以使用内置函数id()来确认对象的身份在两次赋值前后是否发生了变化。

*不可变类型有什么好处?

        如果数据是不可变类型,当我们把数据传给一个不了解的API时,可以确保我们的数据不会被修改。

        如果我们要操作一个从函数返回的元组,可以通过内置函数list()把它转换成一个列表。[元祖被称为只读列表,即数据可以被查询但是不能被更改,但是列表可以]

栈、队列、线性列表、二叉树那个不是线性结构

数据结构中数据的逻辑结构分为线性结构非线性结构

线性结构是一个有序的数据元素的结合,简单的说是 n 个数据元素的有序(次序)集合

    常用的线性结构有:线性表,栈队列,双队列,数组,串

    常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树),图

特征:

    集合中必定存在唯一的一个"第一元素"

    集合中必定存在唯一的一个"最后的元素"

    数据结构中线性结构指的是数据元素之间存在着"一对一"的线性关系的数据结构

    如(a0,a1,a2,.....,an),a0为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。

模糊的说:有索引(有序)的集合 就是线性结构

描述dict中的dict 的item() 和 iteritems() 有什么不同

item方法作用是:可以将字典中所有项,以类似列表方式返回.因为字典是无序的所以用item返回的内容也是无序的

iteritems方法作用是:于item方法相比作用大致相同,只是他的返回值不是列表,而是迭代器

他们的调用方法是一样的: 变量.方法()

请列举python代码检测工具以及它们之间的区别

1)PyFlakes:静态检查Python代码逻辑错误

2)PeP8:静态检查PEP8编码风格的工具

3)NedBatchelder’s McCabe script:静态分析Python代码复杂度的工具。

介绍一下  try  except 的用法和作用

try:

    print(1/0)   # 被除数不能为0,相关错误类型为ZeroDivisionError

except  Exception as e:  # 用 Exception 可以将错误信息直接输出

    print(e)    # 输出内容为division by zero

try except 是用来捕捉异常的,所以,程序执行的时候,首先会执行try 部分 如果try 报错,则执行except部分,如果try部分没错,程序就会跳过except部分

获取python解释器版本的方法有哪些

import platform

print(platform.python_version())   # 3.6.5

import sys

print(sys.version) 

    # 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]

print(sys.version_info)

    # sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)

注意:  如果模块是被导入的,__name__的值是 模块的文件路径和文件名 如果是直接执行__name__ 那他的值是 __main__

如何判断一个变量是否是字符串

该题考察的是变量的概念

1、变量是由数字、字母、下划线组成

2、不能以数字开头

3、不能是python的关键词

4、必须具有可读性

5、不能是中文

6、不能太长

list(列表) 和 tuple(元祖) 有什么不同

元祖也叫只读列表,所以仅能查看,不能修改; 列表是既可以查看也可以修改

当元祖中仅有一个元素是,需要在元素后面加 " , " ;列表则不需要担心

元祖的内置方法比列表的内置方法要少很多

列表还有列表推导式,这是元祖所没有的

元祖可以在映射或集合中充当键的作用,列表则不行

有什么手段能提升python程序的运行性能

1、使用多进程,充分利用机器的多核性能

2、对于性能影响较大的部分代码,可以使用 C 或 C++ 来编写

3、对于 IO 阻塞造成的性能影响,可以使用 IO 多路复用来解决

4、尽量使用Python的内置函数

5、尽量使用局部变量

关于 IO 多路复用可以详细查看 漫谈五种IO模型

关于python的数学模块:math

详查:https://www.cnblogs.com/renpingsheng/p/7171950.html

关于python的复数

复数是由一个人实数和一个虚数构成的,表示为 x+yj

一个复数有一对有序的浮点数(x,y) ,x表示实数部分(横轴),y表示虚数部分(纵轴)

关于复数的概念:

    1、虚数不能单独存在,反综合一个值为 0.0 的实数部分构成一个复数

    2、复数有实数和虚数部分构成

    3、表示虚数的语法:real + imagej

aa = 112-12j

print aa.real        实数部分 112.0

print aa.imag      虚数部分 -12.0

    4、实数部分和虚数部分都是浮点数

    5、虚数部分必须有后缀 j 或 J

内置属性:

    复数对象拥有数据属性,分别为该复数的实部和虚部

    复数还拥有 Conjugate 方法,调用它可以返回该复数的共轭复数对象

    即:复数属性:real(复数的实部)  imag(复数的虚部)  conjugate() (返回共轭复数)

aa =112-12j

print(aa.conjugate())  # 112+12j 

共轭复数: 两个实部相等,虚部互为相反数的复数互为共轭复数,(如果虚部为零,共轭复数就是其自身)

即: 112-12j 与112+12j  互为共轭复数  记做z(上面加一横) 或Z*


上一篇下一篇

猜你喜欢

热点阅读