函数作用域;

LEGB : L>E>G>B
L : local函数内部作用域
E : enclosing函数内部与内嵌函数之间
G : global全局作用域
B : build-in内置作用域

python中encode与decode(先加码,再解码)

str1 = '中国人民'
str2 = str1.encode('utf-8') #将str1转换成utf-8的格式
#用dir()测试该字符串有什么方法
str3 = str2.decode('utf-8') #将str2解码为一般字符串类型
print(str2) #b'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba\xe6\xb0\x91'
print(str3) #中国人民

深入理解Python生成器(Generator)

在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> mylist = [ x for x in range(1, 10)]
>>> mylist
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> gen = (x for x in range(1,10))
>>> gen
<generator object <genexpr> at 0x7f1d7fd0f5a0>

创建mylist和gen的区别仅在于最外层的[]和(),mylist是一个list,而gen是一个generator(生成器)。 我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢? 如果要一个一个打印出来,可以通过generator的next()方法:

gen = (x for x in range(1,10))
print(type(gen)) #<class 'generator'>
print(gen.__next__()) #1
print(gen.__next__()) #2

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

其实我们可以使用for循环来代替next()方式, 这样才更符合高效的编程思路:

    >>> gen = ( x for x in range(1, 10))
>>> for num in gen:
... print num
...
1
2
3
4
5
6
7
8
9

yield的功能类似于return,但是不同之处在于它返回的是生成器

通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串,文件。它可以是mylist = [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。 它的缺陷是所有数据都在内存中,如果有海量数据的话将会非常耗内存。下面我们看看yield的功能

yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面的值。重点是:下一次迭代时,从上一次迭代遇到的yield后面的代码开始执行。 简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

除了next函数,生成器还支持send函数。该函数可以向生成器传递参数。 send可以强行修改上一个yield表达式值。比如函数中有一个yield赋值,

def func():
for i in range(1,10):
n = yield i
print(n) f = func()
print(f.__next__())
f.send(666)
print(f.__next__())
print(f.__next__()) Python 中 Iterator和Iterable的区别
(转载:http://blog.csdn.net/passionkk/article/details/49929887) Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。为什么?

因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。

判断是不是可以迭代,用Iterable

 from collections import Iterable  

isinstance({}, Iterable) --> True  

isinstance((), Iterable) --> True  

isinstance(100, Iterable) --> False

判断是不是迭代器,用Iterator

from collections import Iterator
isinstance({}, Iterator) --> False isinstance((), Iterator) --> False isinstance( (x for x in range(10)), Iterator) --> True 所以,
凡是可以for循环的,都是Iterable 凡是可以next()的,都是Iterator 集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象 Python中的for循环就是通过next实现的 --------------------- 
作者:诸葛亮
来源:博客园
原文:https://www.cnblogs.com/gaosai/
版权声明:本文为博主原创文章,转载请附上博文链接!

python 的面试题总汇的更多相关文章

  1. Python常见面试题

    Q 1:Python 有哪些特点和优点? 作为一门编程入门语言,Python 主要有以下特点和优点: ● 可解释● 具有动态特性● 面向对象● 简明简单● 开源● 具有强大的社区支持当然,实际上 Py ...

  2. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  3. 整理的最全 python常见面试题

      整理的最全 python常见面试题(基本必考)① ②③④⑤⑥⑦⑧⑨⑩ 1.大数据的文件读取: ① 利用生成器generator: ②迭代器进行迭代遍历:for line in file; 2.迭代 ...

  4. python面试笔试题汇总

    Python面试攻略(嗨谈篇) 110道python面试笔试题汇总,你能答对几道? Python 面试问答 Top 25 2018 年最常见的 Python 面试题 & 答案

  5. python基础面试题整理---从零开始 每天十题(02)

    书接上回,我们继续来说说python的面试题,我在各个网站搜集了一些,我给予你们一个推荐的答案,你们可以组织成自己的语言来说出来,让我们更好的做到面向工资编程 一.Q:说说你对zen of pytho ...

  6. python基础面试题整理---从零开始 每天十题(01)

    最近在弄flask的东西,好久没写博客的,感觉少了点什么,感觉被别人落下好多,可能渐渐的养成了写博客的习惯吧.也是自己想学的东西太多了(说白了就是基础太差了,只是know how,不能做到konw w ...

  7. python简单面试题

    在这个即将进入金9银10的跳槽季节的时候,肯定需要一波面试题了,安静总结了一些经常遇到的python面试题,让我们一起撸起来. python面试题 1.求出1-100之间的和 # coidng:utf ...

  8. Python基础面试题库

    Python基础面试题库   Python是一门学习曲线较为容易的编程语言,随着人工智能时代的到来,Python迎来了新一轮的高潮.目前,国内知乎.网易(游戏).腾讯(某些网站).搜狐(邮箱).金山. ...

  9. 2020年Python最新面试题(一):Python基础

    转: 2020年Python最新面试题(一):Python基础 目录 1. 什么是 Python?使用 Python 有什么好处? 2. Python中常用的关键字有哪些? 3. Python 2.x ...

随机推荐

  1. P3146 [USACO16OPEN]248

    P3146 [USACO16OPEN]248 题解 第一道自己码出的区间DP快庆祝一哈 2048 每次可以合并任意相邻的两个数字,得到的不是翻倍而是+1 dp[L][R] 区间 L~R 合并结果 然后 ...

  2. flutter 常用plugins

    搜索plugins flutter plugins搜索地址 谷歌官方plugins https://pub.dev/packages?q=http 到这个链接里面去搜索 https://github. ...

  3. OpenCV画图(画OpenCV的标志)

    import numpy as np import cv2 img = np.ones((512, 512, 3), np.uint8)*255 # 画椭圆 # 图片 (圆心) (短轴长,长轴长),旋 ...

  4. Mac运行React Native安卓项目报错解决

    传送门参考: 下面的这个链接很详细了,一步一步就好.... https://github.com/NARUTOyuyang/React-Native 然而在运行react-native run-and ...

  5. GitLab - 代码仓库管理工具GitLab简介

    1 - GitLab 基于git的开源的仓库管理系统项目,使用git作为代码管理工具,并在此基础上搭建web服务,拥有与Github类似的功能. 社区版(Community Edition,CE) 企 ...

  6. linux 系统函数 basename和dirname

    在linux系统中有这样两个系统函数,basename 和  dirname 1.basename 用于 获取文件名, 1.1 当给定扩展名作为参数之后,甚至可以直接获取文件名 2.与basename ...

  7. 软件测试第2周个人作业:WordCount编码测试

    一.Github地址 https://github.com/zhouyubei/WordCount 二.PSP表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning ...

  8. RestTemplateBuilder类

    Spring Boot使用RestTemplate消费REST服务的几个问题记录 我们可以通过Spring Boot快速开发REST接口,同时也可能需要在实现接口的过程中,通过Spring Boot调 ...

  9. Linux下部署FastDFS

    FastDFS的安装 首先需要准备的资源如下:     libfastcommon-master:https://github.com/happyfish100/libfastcommon FastD ...

  10. Docker CE 下载方式

    1. 找到一个网址挺好的 https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/arm64/ mark 一下 以后用.