900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 机器学习深度学习面试题——Python基础知识

机器学习深度学习面试题——Python基础知识

时间:2023-09-06 14:52:42

相关推荐

机器学习深度学习面试题——Python基础知识

机器学习深度学习面试题——Python基础知识

提示:

python 深拷贝与浅拷贝

python多线程能用多个cpu么?

python垃圾回收机制

python里的生成器是什么

迭代器和生成器的区别

装饰器

python有哪些数据类型

Python 中列表( List )中的 del,remove,和 pop 等的用法和区别

python yeild 和return的区别

python set底层实现

python字典和set()的区别

怎么对字典的值进行排序?

init和new和call的区别

import常用库

python的lamda函数

Python内存管理

python在内存上做了哪些优化?

Python中类方法和静态方法的区别

python多线程怎么实现

点积和矩阵相乘的区别?

Python中错误和异常处理

Python 的传参是传值还是传址?

什么是猴子补丁?

当退出 Python 时是否释放所有内存分配?

Python 中的 is 和 == 有什么区别?

gbk和utf8的区别

遍历字典可以用什么方法

反转列表的方法

python 元组中元组转为字典

range在python2和python3里的区别

init.py 文件的作用以及意义

python的字符串的加法和乘法操作

python 元组骚操作

python 集合set骚操作

python 字典dict骚操作

pyhton 字符串骚操作

python 字符串和数字转换

python格式化字符串

python操作字符串,拼接,删除,查找,替换等

python的函数定义调用

python函数的变量问题

python函数类型,函数嵌套

python过滤函数filter()

python的映射函数map()

python的lambda函数

本文还有后续第2篇,因为本文太长不变读者阅读,所以就开了第2篇:

(2)机器学习深度学习面试题——Python基础知识第2篇,续第1篇

(1)面向对象的python类

(2)python对象的继承性

(3)python对象的多态性

(4)python的异常处理

(5)python的模块:数学计算模块,时间模块

(6)python的正则表达式模块

(7)python文件读写操作

文章目录

机器学习深度学习面试题——Python基础知识@[TOC](文章目录)python的lambda函数python的映射函数map()python过滤函数filter()python函数类型,函数嵌套python函数的变量问题python的函数定义调用python操作字符串,拼接,删除,查找,替换等python格式化字符串python 字符串和数字转换pyhton 字符串骚操作python 字典dict骚操作python的集合骚操作:python 元组骚操作python 深拷贝与浅拷贝python多线程能用多个cpu么?python垃圾回收机制python里的生成器是什么迭代器和生成器的区别装饰器python有哪些数据类型Python 中列表( List )的各种操作,比如 del,remove,和 pop 等的用法和区别python yeild 和return的区别python set底层实现python字典和set()的区别怎么对字典的值进行排序?init和new和call的区别import常用库python的lamda函数Python内存管理python在内存上做了哪些优化?Python中类方法和静态方法的区别python多线程怎么实现点积和矩阵相乘的区别?Python中错误和异常处理Python 的传参是传值还是传址?什么是猴子补丁?当退出 Python 时是否释放所有内存分配?Python 中的 is 和 == 有什么区别?gbk和utf8的区别遍历字典可以用什么方法反转列表的方法python 元组中元组转为字典range在python2和python3里的区别__init__.py 文件的作用以及意义python的字符串的加法和乘法操作切片操作python中的成员测试:判断x在其中吗?总结

python的lambda函数

def calc(opr):if opr == '+':return lambda a, b : (a + b)else:return lambda a, b : (a - b) # 替代加减函数f1 = calc('+')f2 = calc('-')print(f1(10, 5))print(f2(10, 5))

155

lambda只能有一行代码;一条语句,可以多调用别的函数

python的映射函数map()

def f2(x):return 2 * xdata = [1,2,3,4,5]data2 = map(f2, data) # 从data中过滤print(type(data2))print(list(data2))

<class 'map'>[2, 4, 6, 8, 10]

python过滤函数filter()

经过f1过滤后,返回满足条件的剩下的元素

# coding=utf-8def moreThan(x):return x > 2data = [1,2,3,4,5]data2 = filter(moreThan, data) # 从data中过滤print(type(data2))print(list(data2))

结果:

<class 'filter'>[3, 4, 5]

python函数类型,函数嵌套

# coding=utf-8def add(a, b):return a + bdef sub(a, b):return a - bdef square(a):return a * adef calc(opr):if opr == '+':return addelse:return subf1 = calc('+');f2 = calc('-');print(type(f1))print(type(f2))print("10+5={0}".format(f1(10, 5)))print("10-5={0}".format(f2(10, 5)))

发现,函数确实可以作为返回值

<class 'function'><class 'function'>10+5=1510-5=5

python函数的变量问题

全局外部用,内部局部变量

global x在局部把x变为全局变量了。

python的函数定义调用

可变参数,没有数量限制

*a是元组

星星a是字典

python操作字符串,拼接,删除,查找,替换等

>>> s = 'a b c d'>>> s.replace(' ', '|', 1)'a|b c d'>>> s.replace(' ', '|', 2)'a|b|c d'>>> s.replace(' ', '|')'a|b|c|d'

>>> s.split(' ', 0)['a b c d']>>> s.split(' ', 1)['a', 'b c d']>>> s.split(' ', 2)['a', 'b', 'c d']>>> s.split(' ')['a', 'b', 'c', 'd']

python格式化字符串

python 字符串和数字转换

>>> int("90")90>>> float('90.1')90.1>>> int('AB')Traceback (most recent call last):File "<stdin>", line 1, in <module>ValueError: invalid literal for int() with base 10: 'AB'>>> int('AB', 16)171

>>> str(123)'123'

pyhton 字符串骚操作

单引号和双引号都一样:与java和c++不同的

上面是转义字符,所有语言的转义字符差不多。

r是我们编代码经常用的,因为咱们的文件路径需要表示\

>>> s = 'hello\n world'>>> s'hello\n world'>>> s1 =r'hello\n world'>>> s1'hello\\n world'

三重单引号

三重双引号

我还是第一次见

>>> s = '''... 母亲节 5月8日 星期日...... 母亲节(Mother's Day),是一个感谢母亲的节日。现代 的母亲节起源于美国,是每年5月的第二个星期日。... '''>>> s"\n母亲节 5月8日 星期日\n\n母亲节(Mother's Day),是一个感谢母亲的节日。现代的母亲节起源于美国,是每年5月的第二个星期日。\n">>> print(s)母亲节 5月8日 星期日母亲节(Mother's Day),是一个感谢母亲的节日。现代的母 亲节起源于美国,是每年5月的第二个星期日。

python 字典dict骚操作

键值对:

大括号中包含键值对就可以

上面的方法1创建:

>>> dict({1:'a',2:'b',3:'c'}){1: 'a', 2: 'b', 3: 'c'}>>>

方法2:

>>> dict(((1,'a'),(2,'b'),(3,'c'))){1: 'a', 2: 'b', 3: 'c'}

其原理:

还可以通过列表,和元组一样

方法3:

>>> dict([(1,'a'),(2,'b'),(3,'c')]){1: 'a', 2: 'b', 3: 'c'}

方法4:打包zip

>>> dict(zip([1,2,3],['a','b','c'])){1: 'a', 2: 'b', 3: 'c'}

zip相当于干了方法2前面的事情

添加:d[4]='x'>>> d{2: 'b', 3: 'c', 4: 'x'}替换>>> d = dict(zip([1,2,3],['a','b','c']))>>> d{1: 'a', 2: 'b', 3: 'c'}>>> d[1] = 'd'>>> d{1: 'd', 2: 'b', 3: 'c'}

>>> d.pop(1)'d'>>> d{2: 'b', 3: 'c'}

访问字典:

>>> d.items()dict_items([(2, 'b'), (3, 'c'), (4, 'x')])>>> list(d.keys())[2, 3, 4]>>> list(d.values())['b', 'c', 'x']

python的集合骚操作:

大括号**{}——代表集合set,在java中{}是数组

中括号[]——代表列表list

小括号()**——代表元组tuple

这个有点java的哈希集,HashSet是不能重复的,只有key

print(a)(3, 2, 1)>>> print(type(a))<class 'tuple'>>>> set(a){1, 2, 3}>>> {2,1,3,3,4}{1, 2, 3, 4}>>> {}{}>>> type({})<class 'dict'>

>>> a = {1,2,3,4}>>> a.add(6)>>> a{1, 2, 3, 4, 6}>>> 1 in aTrue>>> a.remove(7)Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: 7>>> a.remove(2)>>> a{1, 3, 4, 6}>>> a.clear()>>> aset()>>>

python 元组骚操作

>>> a = (100,'张三')>>> print(a)(100, '张三')>>> id, name = a>>> print(id)100>>> print(name)张三

python 深拷贝与浅拷贝

**浅拷贝(copy):**拷贝父对象,不会拷贝对象的内部的子对象。共用内部的子对象

深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

python多线程能用多个cpu么?

答:不能哦!!!

python的多线程不能利用多核CPU

原因是python的解释器使用了GIL(Global Interpreter Lock),在任意时刻中只允许单个python线程运行。无论系统有多少个CPU核心,python程序都只能在一个CPU上运行

GIL 中文译为全局解释器锁,其本质上类似操作系统的 Mutex。

GIL 的功能是:在 CPython 解释器中执行的每一个 Python 线程,都会先锁住自己,以阻止别的线程执行

python垃圾回收机制

Python的垃圾回收机制是以:引用计数器为主【自动】,标记清除和分代回收为辅【手动】。

(1)主要的回收垃圾方式1:引用计数:每个对象内部都维护了一个值,该值记录这此对象被引用的次数,如果次数为0,则Python垃圾回收机制会自动清除此对象

(2)辅助方式2:标记-清除(Mark—Sweep):被分配对象的计数值与被释放对象的计数值之间的差异累计超过某个阈值,则Python的收集机制就启动

(3)辅助方式3:当代码中主动执行gc.collect()命令时,Python解释器就会进行垃圾回收。

python里的生成器是什么

生成器是一种可以简单有效的创建迭代器的工具。

它们像常规函数一样撰写,但是在需要返回数据时使用yield语句

每当对它调用next()函数,

生成器从它上次停止的地方重新开始

(它会记住所有的数据值和上次执行的语句)。

迭代器和生成器的区别

迭代器有两个方法next方法和iter方法,

iter方法获取对象的迭代器

next方法返回下一个迭代器

生成器:使用了 yield 的函数被称为生成器(generator),在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值,

并在下一次执行next()方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象

区别

**语法上:**生成器是通过函数的形式中调用 yield 或()的形式创建的;

迭代器可以通过 iter()内置函数创建

**用法上:**生成器在调用next()函数或for循环中,所有过程被执行,且返回值;

迭代器在调用next()函数或for循环中,所有值被返回,没有其他过程或说动作。

装饰器

装饰器可以实现,在不改变函数或类的内部代码与调用方式的情况下,使其拥有额外的功能

应用场景:插入日志、性能测试、事务处理、缓存、权限校验

python有哪些数据类型

数字num,字符串string,

列表list,元组tuple,字典dict,集合set

所有语言都类似,java也是

python中,容器类数据类型:

序列可以通过下标索引:

Python 中列表( List )的各种操作,比如 del,remove,和 pop 等的用法和区别

[]中括号——代表列表,这是python的固有类型方式

()括号——代表元组

索引下标,去赋值就行了。

(1)pop

value = List.pop(index)

1、pop按照索引位置删除元素;2、无参数时默认删除最后一个元素;3、返回删除的元素值

(2)remove

1、remove 按照值删除,删除单个元素;2、删除首个符合条件的元素;3、返回值为空 None

(3)del

根据索引位置来删除单个值或指定范围内的值

del是删除**引用(变量)**而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除

python yeild 和return的区别

(1)共同点:return和yield都用来返回值

在一次性地返回所有值场景中return和yield的作用是一样的。

(2)**不同点:**如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可以在循环内部逐个元素返回

牛啊!!!

python set底层实现

散的列表。

与dict不一样,dict是字典,键值对,有key和value

set没有value,只有key【java中是这样的】

python字典和set()的区别

(1)字典是一系列无序的键值对的组合;集合里的元素不是键值对,是单一的一个元素key。

(2)从python3.6后,字典有序集合无序

java找中的hashSet是有序的,不重复的。

(3)字典键不能重复;集合元素不能重复——都不能重复

怎么对字典的值进行排序?

方法一:转化为元组,(91,“张三”)的形式 ,用sorted()函数进行排序

方法二 :设置sorted() 中key的参数的值

#-*-coding:UTF-8-*-#先生成一个随机字典from random import randintd= {x:randint(60,101) for x in "abcdxyz"}print(d)#方法一:元组形式#把值放前面是因为sorted()排序默认按从头比较z = zip(d.values(),d.keys())#x = zip(d.itervalues(),d.iterkeys()) 迭代类型,省空间#排序s = sorted(z)print(s)#方法二:sorted(key的设置)a = d.items()s = sorted(a,key= lambda x:x[1])print(s)

init和new和call的区别

__init__和

__new__和

__call__的区别

(1)__init__是初始化方法

(2)new实例化对象

(3)call:允许一个类的实例像函数一样被调用

实质上说,这意味着 x() 与 x.call() 是相同的

import常用库

time, random, sys, os, math

numpy, pandas, torch, torchvision等

python的lamda函数

它是一个单独的表达式匿名函数,通常用作内联函数

为什么要使用Python Lambda函数?——它是一次性口罩,用完就扔。

匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的。

因此Python Lambda函数也称为丢弃函数,它可以与其他预定义函数(如filter(),map()等)一起使用。

相对于我们定义的可重复使用的函数来说,这个函数更加简单便捷

Python内存管理

Python的内存管理机制可以从三个方面来讲

(1)垃圾回收

(2)引用计数

(3)内存池机制

python在内存上做了哪些优化?

Python的内存管理机制可以从三个方面来讲

(1)垃圾回收

(2)引用计数

(3)内存池机制

Python中类方法和静态方法的区别

Python类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。

静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法

跟c++很像,当然,python就是从c++封装过来的,只不过简单很多。

python多线程怎么实现

Python 提供多线程编程的模块有以下几个:

_thread

threading

Queue

multiprocessing

点积和矩阵相乘的区别?

点积=内积:维度完全一致的两个向量相乘,得到一个标量

矩阵相乘:XN NY==>X*Y,得到的依然是一个矩阵

Python中错误和异常处理

python中会发生两种类型的错误。

**语法错误:**如果未遵循正确的语言语法,则会引发语法错误。

比如少写了一个冒号:或少了tab。

这种错误编译器会为我们指出来,不用我们担心。

逻辑错误(异常):在运行时中,通过语法测试后发生错误的情况称为异常或逻辑类型。

比如除数除以0,运行时就会抛出一个抛出一个ZeroDivisionError异常,叫处理异常。

处理方式为:通过try…except…finally代码块来处理捕获异常并手动处理。

Python 的传参是传值还是传址?

传值或者传引用都不准确。

非要安一个确切的叫法的话,叫传对象(call by object)

什么是猴子补丁?

谓的猴子补丁的含义是指在动态语言中,不去改变源码而对功能进行追加和变更

可扩展性强

当退出 Python 时是否释放所有内存分配?

答案是否定的。

那些具有对象循环引用或者全局命名空间引用的变量,在 Python 退出是往往不会被释放。另外不会释放C 库保留的部分内容

Python 中的 is 和 == 有什么区别?

is比较地址:比较的是两个对象的id值是否相等,

也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址

==比较值:比较的是两个对象的内容是否相等,默认会调用对象的eq()方法

gbk和utf8的区别

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准。

GBK编码专门用来解决中文编码的,是双字节的

不论中英文都是双字节的。

UTF-8 编码是用以解决国际上字符的一种多字节编码,

它对英文使用8位(即一个字节),

中文使用24位(三个字节)来编码。

对于英文字符较多的论坛则用UTF-8 节省空间。

另外,如果是外国人访问你的GBK网页,需要下载中文语言包支持。

访问UTF-8编码的网页则不出现这问题。可以直接访问

GBK包含全部中文字符

UTF-8则包含全世界所有国家需要用到的字符

遍历字典可以用什么方法

4种:

for循环

键值对的健

键值对的值

键值对元素

dic1 = {'date':'.11.2','name':'carlber','work':"遍历",'number':3}for i in dic1: print(i)for key in dic1.keys(): #遍历字典中的**键**print(key)for value in dic1.values(): #遍历字典中的**值**print(value)for item in dic1.items(): #**遍历字典中的元素**print(item)

反转列表的方法

Reverse()

sorted()指定reverse

python 元组中元组转为字典

#create a tupletuplex = ((2, "w"),(3, "r"))print(dict((y, x) for x, y in tuplex))

range在python2和python3里的区别

在py2中,range得到的是一个列表

在py3中,range得到的是一个生成器,节约内存

init.py 文件的作用以及意义

这个文件定义了包的属性和方法,它可以什么也不定义;

可以只是一个空文件,但是必须存在。

如果init.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包

或者可以这样理解。

这样,当我们导入这个包的时候,init.py文件自动运行

帮我们导入了这么多个模块

我们就不需要将所有的 **import语句写在一个文件里了,也可以减少代码量 **

python的字符串的加法和乘法操作

乘法就是加法:

切片操作

左闭右开!!!和java一样

step是跳过的点

省略start或者end,用:替代,就是从0开始,或者到最后

python中的成员测试:判断x在其中吗?

python没有字符类型,只有字符串类型——这与java不同哦

总结

提示:重要经验:

1)python的基础知识,虽然平时都在编代码,但是我们用的都是现成的深度学习模块啥的,里面的其他python知识不是非常了解

2)没事就来看看,互联网大厂的笔试题和面试题都会考,尤其像京东的笔试选择题,一定会考的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。