"Q-1:什么是Python,使用它有什么好处,你对PEP 8有什么了解?"
Python是解释语言之一。
运行脚本不需要在执行之前编译。
Python是一种动态类型语言。
无需在声明过程中提及变量的数据类型。
Python支持面向对象的编程,因为您可以定义类以及组合和继承。
它不使用访问说明符,如公共或私有)。
Python中的函数就像第一类对象。(函数可以分配给变量、可以从其他方法返回函数、函数可以作为参数船渡)
PEP 8是最新的Python编码标准,是一组编码建议。它指导提供更易读的Python代码。
"Q-2:以下Python代码片段的输出是什么?证明你的答案。"
def extendList(var, list_param=[]):
list_param.append(var)
return list_param
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
# 上面的Python代码片段的结果是:
print(list1) # [10, 'a']
print(list2) # [123]
print(list3) # [10, 'a']
"Q-3:如果程序不需要操作但需要语法,那么Python中可以使用的语句是什么?"
pass语句是一个null操作。它执行时什么也没发生。您应该使用小写的“pass”关键字
"Q-4:在Python中使用'〜'获取主目录的过程是什么?"
import os
print(os.path.expanduser('~'))
# /Users/xinyue
"Q-5:Python中有哪些内置类型?"
Python的不可变内置数据类型: 数字/ 字符串/ 元组
Python的可变内置数据类型: 名单 / 字典 / 集合
"Q-6:如何在Python应用程序中查找错误或执行静态分析?"
可以使用PyChecker,它是一个静态分析器。它识别Python项目中的错误,并揭示风格和复杂性相关的错误。另一个工具是Pylint,它检查Python模块是否满足编码标准.
"问题7:Python装饰器何时使用?"
Python装饰器是您在Python语法中进行的相对更改,可以快速调整功能.
装饰器在加载模块时立即执行
"Q-8:列表和元组之间的主要区别是什么?"
列表和元组之间的主要区别在于前者是可变的而元组不是。
例如,允许对元组进行哈希处理,将其用作字典的键
"Q-9:Python如何处理内存管理?"
Python使用私有堆来维护其内存。
所以堆包含所有Python对象和数据结构。
'这个区域只能由Python解释器访问; 程序员不能使用它。
它是处理私有堆的Python内存管理器。
它为Python对象执行所需的内存分配。
Python使用内置的垃圾收集器,它可以收回所有未使用的内存并将其卸载到堆空间。
"Q-10:lambda和def之间的主要区别是什么?"
当lambda是uni-expression函数时,def可以包含多个表达式。
def生成一个函数并指定一个名称以便稍后调用它。lambda形成一个函数对象并返回它。
def可以有一个return语句。lambda不能有return语句。
lambda支持在列表和字典中使用。
"问题11:编写一个reg表达式,使用Python 正则表达式匹配一个电子邮件地址?"
import re
print(re.search(r"[0-9a-zA-Z.]+@[a-zA-Z]+\.com$","136.pages@qq.com"))
"Q-12:您认为以下代码片段的输出是什么?代码中有错误吗?"
list = ['a', 'b', 'c', 'd', 'e']
print (list[10:])
会输出空列表, 但有错误, 不能使用list命名变量,如果后续代码调用list()方法时会报错, 不会报错IndexError
"Q-13:Python中是否有Switch或Case语句?如果不是那么原因是什么?"
Python没有Switch语句,但您可以编写Switch函数然后使用它
"Q-14:Python用于迭代数字序列的内置函数是什么?"
Range()生成一个数字列表,用于迭代for循环
"Q-15:Python中Try-Except块内可能的可选语句是什么?"
else 语句:
如果您想在try块没有创建异常时运行一段代码,这将非常有用。
final语句:
当您想要执行某些运行步骤时,无论是否发生异常,它都很有用。
"Q-16:Python中的字符串是什么?"
Python中的字符串是一个字母数字字符序列。
它们是不可变的对象。这意味着一旦获得值,他们就不允许修改。
Python提供了几种方法,例如join(),replace()或split()来改变字符串。
但这些都不会改变原始对象。会创建新字符串
"Q-17:Python中的切片是什么?"
切片是一个序列操作,用于提取字符串的一部分或列表的某些部分。
在Python中,字符串(比如文本)从索引0开始,第n个字符存储在位置文本[n-1]。
Python也可以在负数的帮助下执行反向索引,即向后方向。
在Python中,slice()也是一个生成切片对象的构造函数。
结果是范围(开始,停止,步骤)提到的一组索引。
slice()方法允许三个参数。
1.开始 - 开始切片的起始编号。
2.停止 - 表示切片结束的数字。
3. step - 每个索引后递增的值(默认值= 1)
"Q-18:Python中的%S是什么?"
Python支持将任何值格式化为字符串。它可能包含非常复杂的表达式,常见的用法之一是使用%s格式说明符将值推送到字符串中
"Q-19:Python中的字符串是不可变的还是可变的?"
Python字符串确实是不可变的
"Q-20:Python中的索引是什么?"
索引是整数数据类型,表示有序列表或字符串中的位置
在Python中,字符串也是字符列表。我们可以使用从零开始并且长度减去1的索引来访问它们。
"Q-21:Python中的Docstring是什么?"
docstring是一个唯一的文本,恰好是以下Python结构中的第一个语句:
模块,函数,类或方法定义。docstring被添加到字符串对象的__doc__属性中。
"Q-22:Python编程中的函数是什么?"
函数是表示代码块并且是可重用实体的对象。它为程序带来了模块化,并提供了更高程度的代码可重用性。
"Q-23:Python中有多少基本类型的函数可用?"
两种:build-in 和 User-defined
"Q-24:我们如何在Python中编写函数?"
通过def来编写函数
"Q-25:Python中的函数调用或可调用对象是什么?"
python中的函数被视为可调用对象。它可以允许一些参数,并以元组的形式返回一个值或多个值。除了函数之外,Python还有其他构造,例如类或适合同一类别的类实例。
"Q-26:Python中使用的return关键字是什么?"
函数的目的是接收输入并返回一些输出.
return是一个Python语句,我们可以在函数中使用它来将值发送回其调用者。
在call-by-value中,表达式或值是否绑定到函数中的相应变量的参数。
Python会将该变量视为函数级范围中的局部变量。
对该变量所做的任何更改都将保留在局部,并且不会反映在该函数之外。
可以互换地使用“引用调用”和“引用传递”。当我们通过引用传递参数时,它可以作为函数的隐式引用,而不是简单的副本。在这种情况下,对参数的任何修改也将对调用者可见。
该方案还具有带来更多时间和空间效率的优点,因为它不需要创建局部副本。相反,缺点可能是在函数调用期间变量可能会意外更改。因此,程序员需要处理代码以避免这种不确定性。
截断x小数点后的数字,只留下构成x整数部分的有效数字
函数根本不需要返回任何值。
但是,如果需要,我们可以使用None作为返回值。
continue是Python中的一个跳转语句,它将控件移动到循环中执行下一次迭代,使块中的所有剩余指令不执行。
continue语句适用于“while”和“for”循环。
它允许一个参数并返回目标对象的标识。这种身份恰好在生命周期中是独一无二的。
用在定义函数的头部,允许函数接受任意数量的非关键字参数
用在定义函数的头部,允许函数接受任意数量的关键字参数
main()是入口点函数,恰好在大多数编程语言中首先调用.
由于Python是基于解释器的,因此它逐个顺序执行代码行。
Python也有一个Main()方法。但是每当我们运行Python脚本时,只要直接单击它或从命令行启动它就会执行它
__name__ 是一个唯一变量。
由于Python没有公开main()函数,所以当它的解释器运行脚本时,它首先执行0级缩进的代码。
要查看main()是否被调用,我们可以在if子句中使用__name__变量与值__main__进行比较。
Q-37:Python中end的目的是什么?
print(value, sep=' ', end='\n', file=sys.stdout, flush=False)
Python的print()函数总是在最后打印一个换行符。print()函数接受一个称为'end'的可选参数。默认值为'\ n'。我们可以使用此参数使用我们选择的值更改print语句中的结束字符。
Q-38:什么时候应该在Python中使用“break”?
Python提供了一个break语句来退出循环。
每当中断在代码中命中时,程序的控制立即从循环体中退出。
嵌套循环中的break语句导致控件退出内部迭代块
Q-39:Python中pass和continue有什么区别?
continue语句使循环从下一次迭代中恢复
pass语句指示什么都不做,代码的其余部分像往常一样执行
在Python中,len()是主要的字符串函数。它确定输入字符串的长度。
返回表示Unicode代码点为整数的字符的字符串
Python中的ord(char)接受一个大小为1的字符串,并返回一个整数,表示Unicode类型对象的字符的Unicode代码格式,如果参数是8位字符串类型,则返回字节的值。
Python提供了rstrip()方法,该方法复制了字符串,但是从末尾省略了空白字符。rstrip()根据参数值从右端转义字符,即提示要排除的字符组的字符串。
空格表示我们用于间距和分隔的字符。
Python为字符串处理目的提供了这个内置的isalpha()函数
如果字符串中的所有字符都是字母类型,则返回True,否则返回False.
Python的split()函数适用于字符串,可将大块剪切成较小的块或子字符串。我们可以指定一个分隔符来开始拆分,或者默认情况下将该空间用作一个
Python提供了join()方法,该方法适用于字符串,列表和元组。它组合了它们并返回一个统一的值
Python提供了title()方法,用于将每个单词中的第一个字母转换为大写格式,而其余单词则转换为小写。
CPython的核心是用C开发的。前缀“C”代表了这个事实。它运行一个解释器循环,用于将Python-ish代码转换为C语言
PyPy提供最大的兼容性,同时利用CPython实现来提高其性能。
测试证实PyPy比CPython快近五倍。它目前支持Python 2.7。
Python支持GIL(全局解释器锁),它是一个互斥体,用于保护对Python对象的访问,同时使多个线程同步运行Python字节码
Python确保安全访问线程。它使用GIL互斥锁来设置同步。如果一个线程在任何时候失去GIL锁定,那么你必须使代码线程安全。
Python在内部实现了一个堆管理器,它包含所有对象和数据结构。
此堆管理器为对象分配/取消分配堆空间。
元组是Python中的集合类型数据结构,它是不可变的。
它们与序列类似,就像列表一样。但是,元组和列表之间存在一些差异; 前者不允许修改,而列表则允许修改。
此外,元组使用括号括起来,但列表的语法中有方括号。
字典是一种在Python中称为关联数组的数据结构,它存储一组对象。
该集合是一组具有单个关联值的键。我们可以将其称为散列,映射或散列映射,因为它在其他编程语言中被调用。
集合是Python中的无序集合对象。它们存储唯一且不可变的对象。Python的实现源自数学。
字典有一组对象(键)映射到另一组对象(值)。Python字典表示唯一键到值的映射。
它们是可变的,因此不会改变。与键关联的值可以是任何Python类型。
Python列表是一个可变长度数组,它与C风格的链表不同。
在内部,它有一个连续的数组,用于引用其他对象,并在列表头结构中存储指向数组变量及其长度的指针。
Python支持面向对象的编程,并提供几乎所有在程序中使用的OOP功能。
Python类是创建对象的蓝图。它定义成员变量并获取与它们相关联的行为。
我们可以使用关键字“class”来创建它。从构造函数创建一个对象。此对象表示类的实例。
如果一个类没有定义任何功能,那么它就没用了。我们可以通过添加属性来实现。它们作为数据和功能的容器。我们可以直接在类体内添加一个属性。添加属性后,我们可以继续定义函数。通常,我们称它们为方法。在方法签名中,我们总是必须提供带有self-keyword的第一个参数。
Q-61:如何在运行时为Class属性赋值?
我们可以在运行时指定属性的值。我们需要添加一个init方法并将输入传递给对象构造函数。请参阅以下示例演示此操作
class Human:
def __init__(self, profession):
self.profession = profession
def set_profession(self, new_profession):
self.profession = new_profession
man = Human("Manager")
print(man.profession)
# Manager
Q-62:Python编程中的继承是什么?
继承使对象从另一个对象派生,并允许后者使用父对象的功能,就像它们自己的一样。常见的代码将驻留在基类中,而另一个对象现在将从父类继承.
Q-63:Python中的组合composition是什么?
该组合是一种特殊类型的继承。它意味着从基类继承,但使用实例变量形成关系,实例变量是对不同对象的引用。为了演示组合,我们需要在类中实例化其他对象,然后使用这些实例
class PC: # Base class PC:
processor = "Xeon" # Common attribute= "Xeon"
def __init__(self, processor, ram):
self.processor = processor
self.ram = ram
def set_processor(self, new_processor):
processor = new_processor
def get_PC(self):
return "%s cpu & %s ram" % (self.processor, self.ram)
class Tablet():
make = "Intel"
def __init__(self, processor, ram, make):
self.PC = PC(processor, ram) # Compositionself.PC = PC(processor, ram)
self.make = make
def get_Tablet(self):
return "Tablet with %s CPU & %s ram by %s" % (self.PC.processor, self.PC.ram, self.make)
if __name__ == "__main__":
tab = Tablet("i7", "16 GB", "Intel")
print(tab.get_Tablet())
# Tablet with i7 CPU & 16 GB ram by Intel
Q-64:Python程序中的错误和异常是什么?
错误是程序中的编码问题,可能导致异常退出。
相反,由于发生中断程序正常流程的外部事件而发生异常。
Q-65:如何使用Python中的Try / Except / Finally处理异常?
Python放下Try,Except,Finally构造来处理错误和异常。我们将不安全代码包含在try块下面。我们可以在except块中保留我们的后备代码。用于最后执行的任何指令都应归入finally块.
Q-66:如何在Python中为预定义条件引发异常?
我们可以根据某些条件提出异常。
例如,如果我们希望用户只输入奇数,否则会引发异常
Q-67:什么是Python迭代器?
Python中的迭代器是类似于数组的对象,允许移动下一个元素。我们在遍历循环时使用它们,例如,在“for”循环中。
例如,列表也是一个迭代器,我们可以在它上面启动一个for循环.
Q-68:iterator和iterable有什么区别?
像列表,元组,字典和集合这样的集合类型都是可迭代的对象,而它们也是可遍历的容器,它在遍历时返回迭代器.
Q-69:什么是Python生成器?
generator是一种函数,它允许我们指定一个充当迭代器的函数,因此可以在“for”循环中使用。
# Simple Python function
def fn():
return "Simple Python function."
# Python Generator function
def generate():
yield "Python Generator function."
print(next(generate()))
Q-70:Python中的闭包是什么?
Python闭包是另一个函数返回的函数对象。我们使用它们来消除代码冗余。在下面的例子中,我们编写了一个简单的闭包来乘以数字。
def multiply_number(num):
def product(number):
'product() here is a closure'
return num * number
return product
num_2 = multiply_number(2)
print(num_2(11))
print(num_2(24))
num_6 = multiply_number(6)
print(num_6(1))
Q-71:Python中的装饰器是什么?
Python装饰器使我们能够动态地向给定对象添加新行为。在下面的示例中,我们编写了一个简单的示例,用于在函数执行前后显示消息.
def decorator_sample(func):
def decorator_hook(*args, **kwargs):
print("Before the function call")
result = func(*args, **kwargs)
print("After the function call")
return result
return decorator_hook
@decorator_sample
def product(x, y):
"Function to multiply two numbers."
return x * y
print(product(3, 3)) # 9
Q-72:如何在Python中创建字典?
1字典键使用不可变类型,
2字典值可以是任意类型,
3中间用冒号分割,
4每个字典键值对,用逗号分割
Q-73:你如何阅读Python中的字典?
通过字典的键作为索引来获取字典值
Q-74:你如何遍历Python中的字典对象?
我们可以使用“for”和“in”循环来遍历字典对象。
dic = {
'name':'xin yue',
'sex': 'man',
'age':18
}
for k,v in dic.items():
print(k,v)
Q-75:如何在Python中向字典添加元素?
可以给字典设置新的键值对, dic['hobi']='play game'
甚至可以在update()方法的帮助将另一个字典加入当前字典
Q-76:如何删除Python中字典的元素?
我们可以使用del()方法删除字典中的键.
我们可以使用的另一种方法是pop()函数。它接受key作为参数。
Q-77:如何检查字典中是否存在密钥?
我们可以使用Python的“in”运算符来测试dict对象中是否存在键
早期有个has_key()方法,但目前版本没有
Q-78:Python中List 推导式的语法是什么?
[ expression(var) for var in iterable ]
list1 = [ i for i in range(0,10)]
alist = [var for var in range(10, 20)]
Q-79:Python中字典推导式的语法是什么?
{ aKey, itsValue for aKey in iterable }
Q-80:Python中Generator表达式的语法是什么?
( expression(var) for var in iterable )
(var for var in range(10, 20))
Q-81:你如何在Python中编写条件表达式?
True if expression else False
lambda a,b: a if a>b else b
print((lambda a,b: a if a>b else b)(1, 2)) # 2
Q-82:你对Python枚举enumerate有什么了解?
在使用迭代器时,有时我们可能会有一个用例来存储迭代次数。Python通过提供一个称为enumerate()的内置方法,让我们很容易完成这项任务。
enumerate()函数将一个计数器变量附加到一个iterable,并将其作为“枚举”对象返回。
我们可以直接在“for”循环中使用此对象,或通过调用list()方法将其转换为元组列表。它有以下签名:
enumerate(iterable, to_begin=0)
a=['java','python','node','C']
for i in enumerate(a):
print(i)
# (0,java(1,python) ...
Q-83:Python中使用globals()函数有什么用?
python中的globals()函数将当前的全局符号表作为字典对象返回。
Python维护一个符号表来保存有关程序的所有必要信息。此信息包括程序使用的变量,方法和类的名称。此表中的所有信息都保留在程序的全局范围内,Python允许我们使用globals()方法检索它。
Q-84:为什么在Python中使用zip()方法?
zip方法允许我们映射多个容器的相应索引,以便我们可以将它们用作单个单元.
emp = [ "tom", "john", "jerry", "jake" ]
age = [ 32, 28, 33, 44 ]
dept = [ 'HR', 'Accounts', 'R&D', 'IT' ]
print(list(zip(emp,age,dept)))
# [('tom', 32, 'HR'), ('john', 28, 'Accounts'), ('jerry', 33, 'R&D'), ('jake', 44, 'IT')]
Q-85:Python编程中的类变量或静态变量是什么?
在Python中,所有对象共享公共类或静态变量。
但是实例或非静态变量对于不同的对象完全不同。
Q-86:三元运算符如何在Python中运行?
三元运算符是条件语句的替代。它将true或false值与您需要测试的语句组合在一起。语法类似于下面给出的语法。
[onTrue] if [Condition] else [onFalse]
Q-87:self关键字有什么作用?
该self 是一个Python关键字,其表示保持对象的实例的变量。
在几乎所有面向对象的语言中,它都作为隐藏参数传递给方法。
有两种方法可以在Python中复制对象。
>copy.copy()函数 : 浅复制
copy.deepcopy()函数 : 深复制
在Python中,文档字符串就是我们所说的doc字符串。
它设置了记录Python函数,模块和类的过程。
数字转换为字符串,使用内置函数str()
数字 转换 八进制 , 使用内置函数oct()
数字转换十六进制,使用内置函数hex()
Q-91:如何在Python中调试程序?是否可以单步执行Python代码?
我们可以使用Python调试器(pdb)来调试任何Python程序。
如果我们使用pdb启动程序,那么我们甚至可以逐步完成代码.
以下是一些用于开始调试Python代码的PDB命令。
添加断点(b)
恢复执行(c)
逐步调试(s)
转到下一行(n)
列出源代码(l)
打印表达式(p)
>$ python -m pdb python-script.py
在Python中,我们可以使用 sys 模块的settrace()方法来设置跟踪挂钩并监视程序内的函数
您需要定义跟踪回调方法并将其传递给settrace() 函数。回调应指定三个参数,如下所示。
Python中的生成器是一个返回可迭代对象的函数。我们可以使用yield 关键字迭代生成器对象。但是我们只能这样操作一次, 因为他们的全部值不会持续存在内存中,当我们获取值立刻返回。
只要我们想保留它,生成器就能让我们保持执行函数或步骤。但是,这里有一些使用生成器是有益的例子。
我们可以用生成器替换循环,以有效地计算涉及大数据集的结果。
当我们不想要所有结果并希望保留一段时间时,生成器很有用。
我们可以用生成器替换它,而不是使用回调函数。我们可以在函数内部编写一个循环来执行与回调相同的操作并将其转换为生成器。
`yield` 关键字可以将任何函数转换成生成器。
它的工作方式与标准的return关键字相同 但它总会返回一个生成器对象。
此外,方法可以对yield 关键字进行多次调用。
Q-97:如何将列表转换为其他数据类型?
有时,我们不会按原样使用列表。相反,我们必须将它们转换为其他类型。将列表转换为字符串。我们可以使用 .join() 方法,它将所有元素组合成一个并返回为字符串
weekdays = ['sun','mon','tue','wed','thu','fri','sat']
listAsString = ' '.join(weekdays)
print(listAsString)
#output: sun mon tue wed thu fri sat
将列表转换为集合。
将列表转换为集合会产生两种副作用。集合不允许重复输入,以便转换将删除任何此类项目。集合是有序集合,因此列表项的顺序也会发生变化。但是,我们可以使用set()函数将列表转换为集合.
weekdays = ['sun','mon','tue','wed','thu','fri','sat','sun','tue']
listAsSet = set(weekdays)
print(listAsSet)
#output: set(['wed', 'sun', 'thu', 'tue', 'mon', 'fri', 'sat'])
将列表转换为字典。
在字典中,每个项目代表一个键值对。因此,转换列表并不像其他数据类型那样简单。但是,我们可以通过将列表分成一组对来实现转换,然后调用zip()函数将它们作为元组返回。将元组传递给dict()函数最终将它们变成字典。
weekdays = ['sun','mon','tue','wed','thu','fri']
listAsDict = dict(zip(weekdays[0::2], weekdays[1::2]))
print(listAsDict)
#output: {'sun': 'mon', 'thu': 'fri', 'tue': 'wed'}
Q-98:如何在没有明确提及的情况下计算列表中每个项目的出现次数?
与集合不同,列表可以包含具有相同值的项目。
在Python中,列表具有count() 函数,该函数返回特定项的出现次数。
计算单个项目的出现次数:
weekdays = ['sun','mon','tue','wed','thu','fri','sun','mon','mon']
print(weekdays.count('mon'))
#output: 3