python

本文介绍了Python的基本概念,包括语言特点、内置类型、数据结构、控制结构、函数定义与调用等核心内容,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python是一个面向对象的解释型的交互式高级脚本语言:Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。

Python是一种面向对象的语言:即Python是支持面向对象的,支持在对象中进行代码封装。

Python是一种解释型语言:即Python程序是在运行时由解释器解释执行的,因而不用事先编译源程序。这一点和Perl和PHP类似。

Python是一种交互式语言:即你能够在Python提示符下直接交互式地编写你的程序。

Python是初学者的语言:Python是一种非常适合初学者的语言,它支持多种类型的应用程序的开发,如简单的文本处理、www浏览器应用程序开发、游戏开发等等。

 

1)什么是Python?使用Python的优点有哪些?缺点有哪些?

Python是一种面向对象的解释性的交互式语言,带有对象、模块、线程、异常和内存自动管理的机制。

使用Python的优点有:简单、易学、轻便可移植、可扩展、可读性、具有多种内建数据类型、开源等等。

使用Python的缺点有:运行速度慢,代码不能加密(解释性语言,发布python应用只能发布源代码,不像C发布编译后的应用文件)

 

2)什么是PEP 8?

PEP 8是一种编码规范,是一系列关于如何让Python代码更加具有可读性的编码建议。

 

3)什么是序列化(pickling)和反序列化(unpickling)?

序列化:将在内存中的变量转为可存储或传输的过程。应用JSON传输,序列化为统一格式json

反序列化:与序列化的过程相反

Pickle模块允许我们将Python对象转换成一个string表示的信息,并且可以使用dump函数将其保存到一个文件中去,这样的过程称为序列化。而使用文件中保存的对象信息重构Python对象的过程称为反序列化。

 

4)Python是如何被解释执行的?

Python是一种解释型语言,它可以直接从源代码运行程序。程序员编写的源代码首先转变成一种中间语言代码,然后再被转换成能够直接执行的机器语言代码。

 

5)Python是如何进行内存管理的?

Python内存空间是以Python私有堆的形式进行管理的。所有的Python对象和数据结构都存放在一个私有堆中。解释器可以访问私有堆,而程序员不可以。

将Python堆空间中的内存分配给Python对象的工作是由Python内存管理器完成的。而内核API则会提供给程序员一些相关的工具来完成涉及到内存的编码工作。

Python还内置垃圾回收器,从而进行回收释放内存到堆空间。

 

6)能够找到程序中的bug进行静态分析的工具有哪些?

PyChecker是一种能够发现Python源代码中的bug并对其中的代码风格和复杂度进行警告的静态分析工具。另外一种工具是Pylint,它能够验证模块是否满足编码标准。

 

7)什么是Python装饰器?

用来装饰一个函数从而使这个函数在不修改本身的函数定义外,动态产生额外的功能;装饰函数的入参为需要被装饰的函数。装饰器本质上是一个返回函数的高阶函数

一个Python装饰器是我们在符合Python语法的同时又方便地对函数做的一些特定的修改。

 

8)列表、元组、集合、字典的区别是什么?

列表:元素可变(任何数据类型),有序(可索引),append/insert/pop;

元组:元素不可变,但元素中的可变元素是可变的;有序(可索引);而且元组可以被散列,例如作为字典的键。

集合:无序(不可被索引)、互异

字典:无序,键值对(key:value),key唯一不可重复

 

9)怎样理解字典和列表?

它们是一种用来创建可变对象的语法结构,数据容器。

dic插入、查找速度比list快,不会随key的增加而增加,但list会随着元素的增加而增加(偏移量)

 

10)参数是如何通过值或者引用传递的?

python中确切说应该是“传对象引用”的方式,引用对象传递。 一切皆对象,参数皆引用

如果函数收到的是一个可变对象(比如列表、字典)的引用,则可修改对象的原始值==相当于“引用传递”方式;

如果函数收到的是一个不可变对象(比如数字、字符、元组),就不能直接修改原始对象指向的值==相当于“值传递”方式;

 

11)Python提供哪些内置类型?(原文有语法错误,根据个人理解翻译)

分为可变类型和不可变类型。

可变类型:

列表

集合

字典

不可变类型:

字符串

元组

数字

 

12)Python中的命名空间是什么?

名字到对象的一个映射;

一个对象拥有一个ID(内存地址)、一个类型、一个值,但可以有不同的名字,比如:a=1,b=a,a和b指向同一个对象;

命名空间就是用来映射这个关系的;

 

13)Python中的lambda表达式是什么?

lambda表达式是一个匿名函数,省去了对函数命名,所以叫匿名函数。通常用作代码行内的嵌入函数。

 

14)为什么Python中的lambda表达式没有声明?

Python中的lambda表达式没有声明是因为它只是用来创建一个新的函数对象,并且在运行时才返回值给对象。

 

15)Python中的pass是什么意思?

pass是Python中的空操作语句,或者说,它是一个复杂语句中的一个空间占位符,只是用来表示空白,什么都不用写。

 

16)Python的迭代器是什么?

迭代器是用来迭代可迭代对象的,比如包含一组元素的列表。 iter()生成迭代器对象,next()依次访问迭代器对象的下一个值

 

17)Python中的unittest是什么?

unittest是Python中的单元测试框架。它支持共享的测试建立、自动测试、关闭测试、聚集测试等等。

 

18)什么是切片?

从一组序列中截取一段序列的机制,比如列表、元组、字符串等类型中选择一个范围中的元素。

 

19)Python中的生成器是什么?

一种特殊的迭代器,用关键字yield表示,它特殊的地方在于运用在函数中函数体没有return返回,而是使用关键字yield返回值,yield每返回一次,函数状态挂起 。这种函数叫做生成器函数,被调用时返回一个生成器对象;

 

20)Python中的docstring是什么?

docstring是一个py文件、函数、类开头部分的用'''编写的一段注释文档和说明,通过help函数可查看该文档说明。

docstring是Python中产生文档的方式,它可以为Python中的函数、模块和类产生说明文档。

 

21)Python中如何拷贝一个对象?

使用标准库的copy模块:copy.copy()浅拷贝,copy.deepcopy()深拷贝

copy.copy()浅拷贝:拷贝了对象,但拷贝对象的值仍然是指向原对象的值(相当于引用),修改拷贝对象的元素,则被拷贝对象的值也会被修改

copy.deepcopy()深拷贝: 不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立;但这需要牺牲一定的时间和空间。

 

22)Python中负的索引是什么意思?

Python中可以使用整数和负数进行索引。对于正索引,0是第一个,1是第二个,以此类推。对于负索引,-1是最后一个,-2是倒数第二个,以此类推。

 

23)怎样将一个数字转换成字符串?

使用内置函数str()即可。如果想要八进制或者十六进制的形式,可以使用oct或者hex函数。

 

24)xrange和range的区别是什么?

xrange返回一个xrange生成器对象,而range返回一个list对象。

生成很大数列的时候,range会使用和其范围大小相同的内存;相比xrange的性能要高很多

 

25)Python中的模块和包是什么?

在Python中,模块就是一种构建程序的方式。每一个Python程序文件都是一个模块,这个文件还可以引入其他模块如对象和属性等。

包就是一个带有__init__.py文件的文件夹,里面可包含多个模块

 

26)@property、@staticmethod、@classmethod:

@property:特性,被其装饰过的方法(函数),可以当成属性一样去调用和访问。如:a()是一个方法==》c.a(对象.属性)调用

@staticmethod:静态方法,被其装饰的函数中不含self参数,相当于类外面的方法,但会在类中被调用(跟类有关系但在运行时又不需要实例和类参与)。通过类名调用

@classmethod:类方法,通过类名调用(一般类中的方法是实例方法,通过实例调用),使用时将类作为方法的第一个参数传入,如:

@classmethod

def test(cls):

    print(cls,cls.x)

 

27) 如何理解self?

self为类中方法的默认第一个参数,self指向创建的实例本身。 调用时self不需要传,Python解释器自己会把实例变量传进去

一、知识点整理

1、python2与python3的区别:

     (1)宏观比对

      python2 源码不标准,较为混乱,并且重复的代码很多。

      python3 源码统一了标准,同时也去除了重复代码。

 

     (2)编码比对

      python2默认编码方式是ASCII。

      python3默认编码方式是utf-8(能识别中文)。

      

      PS:对应python2的编码问题,可以在代码首行处加入 #-*- encoding:utf-8 -*- 解决。

 

2、python的环境分为“编译型”与解释型;

 

      编译型指的是一次性将所有程序编译成二进制文件。

        优点:运行速度很快

        缺点:开发效率低,不能跨平台执行

        语种:C/C++/GO/Swift/Object-C/Pascal等

 

      解释型指的是当程序执行时,编译器会将代码一行一行的解释。

        优点:开发效率高,可以跨平台执行。

        缺点:运行速度慢。

        语种:JS/Python/Ruby/PHP/Perl/Erlang

 

       PS:Java和C#属于混合型语种;

       PS:python是一门动态解释型的强类定义语言;

3、变量是将一些运算的中间结果暂存到内容当中,以便后续代码的调用。

        格式:变量名 = 值

        命名要求:

            1)变量命名必须有数字、字母、下划线任意组合,但不能使用数字开头。

            2)不能是python中的关键字,关键字的范围是“['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']”

            3)变量具有可描述性,例如名称变量可定义为“name”,不能定义为“asss”。

            4)变量命名不能是中文。

 

4、常量就是一个一直不变的量,并且命名最好全部是大写。

 

5、注释是为了方便自己与他人更好的理解代码。

        单行注释:#

        多行注释:'''被注释的内容'''  或  """被注释的内容"""

 

6、用户交互 input 输入命令:

        1)等待用户输入内容;

        2)将输入的内容赋值给了前面的变量;

        3)input 出来的数据类型全部是str类型;

 

7、基础数据类型可以分为三种3种, 数字、字符串、布尔类型(暂时介绍这三种)。

        int(整数型)

        在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

        在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

 

        字符串转化成数字用法是 int(str) 

            ps:str必须是数字组成的

 

        数字转化成字符串用法是 str(int)

 

        long(长整数型)

        跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

 

        PS:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

        注意:在Python3里不再有long类型了,全都是int

 

        str(字符串类型)

        python当中凡是用引号(单引号或双引号)引起来的都是字符串。

            特性:

                    可相加:字符串的拼接。

                    可相乘:str * int 

 

        bool(布尔值)

        分为True和False两种。

 

二、基础命令整理

1、print 打印输出命令,例如 print(123) 或 print('一二三')

2、type 是一个内建的函数,调用他能够得到一个返回值,从而知道想要查询的对象类型信息,例如print(123,type(123))

3、input 输入命令,程序会等待用户输入值,值全部是字符类型。例如变量name = input('请输入您的名字!') 

4、''单引号:当字符串中包含双引号时,可以用单引号引起来。

     ""双引号:当字符串中包含单引号时,可以用双引号引起来。

     """多引号:当字符串是多行内容时,必须要用多引号引起来。

5、字符串拼接:

     例如 name + age ,表示name变量(str)拼接上age变量(str)

             name * 10 ,表示输出name变量(str)值10此,并且将其全部拼接在一起。

6、运算符介绍:

7、逻辑运算:

 

  逻辑运算分为 and 、 or 、 not 三种。

        1)在没有()的情况下,not 优先级高于 and ,and优先级高于 or ,即关系为 () > not > and > or ,同一优先级从左往右计算。

 

        2)x or y , x 为真,值就是x,相反 x 为假,那么值就是 y;

             x and y , x 为真,值是 y,相反 x 为假,那么值就是x;

 

        3)or  和 and 的返回值正好相反。

 

  or:

      只要有一个True,就会返回True

      PS:如果程序首先看到True,就不会再看or 后面的条件。

  and

      只要有一个False,就会返回False

       PS:如果程序首先看到False,就不会再看and 后面的条件。

 

8、赋值运算:

9、if 流程控制语句

    单分支格式:

            if 条件:

                满足条件执行代码

 

    双分支格式:

            if 条件:

                满足条件执行代码

            else:

                if条件不满足就走这段代码

 

    多分支格式:

            if 条件:

                满足条件执行代码

            elif 条件:

                上面条件不满足就走这个

            elif 条件:

                上面条件不满足就走这个

            elif 条件:

                上面条件不满足就走这个

            elif 条件:

                上面条件不满足就走这个

10、while循环语句

        基本循环格式:

            while 条件:

                # 循环体

          

        循环终止语句:

            1)break:完全终止循环

            2)continue:单次终止循环

 

   while else:

    当while循环正常执行完,中间没有被break中止的话,就会执行else后面的语句。

 

11、格式化输出 - 占位符

        %s 表示字符串占位符;

        %d 表示数字占位符;

        %% 会被解析成字符%,如%%s 解析成 %s

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值