16-高阶函数&虚拟环境

一、高阶函数【掌握】

1.map()

代码演示:

"""
map(function,iterable)
function:函数
iterable:可迭代对象
作用:将传入的函数依次作用于可迭代对象中的每一个元素,并把结果【Iterator】返回
"""
#需求1:给一个已知列表中的元素求平方
def square(x):
    return x ** 2
list1 = [1,2,3,4,5]
result1 = map(square,list1)
#注意:map是一个类,表示一种数据类型,集合或者序列,使用类似于list,tuple,set
print(result1)   #<map object at 0x000001EE25431DA0>
print(type(result1))   #<class 'map'>
print(list(result1))  #[1, 4, 9, 16, 25]

result2 = map(lambda x:x ** 2,list1)
print(list(result2))

#str = 10

#需求2:将整型元素的列表转换为字符串元素的列表
#举例:[1,2,3,4]------>["1","2","3","4"]
#str(1) ---- >字符串1
#注意:在使用系统函数之前,最好不要出现同名的变量
result3 = map(str,[1,2,3,4])
print(list(result3))


#需求3:已知两个整型列表,将两个列表中相同位置的元素相加,得到一个新的列表
def add(x,y):
    return  x  + y
l1 = [1,2,3,4,5]
l2 = [6,7,8,9,10]

result4 = map(add,l1,l2)
print(list(result4))

2.reduce()

代码演示:

from  functools  import  reduce

"""
reduce(function,Iterable)  :通过函数对参数列表中的元素进行累积
function:函数
Iterable:可迭代对象,一般使用列表
工作原理:用传给reduce的function先作用于list中第一个和第二个元素,用得到的结果和list中第三个元素计算。。。
reduce(add,[a,b,c,d])
add(add(add(a,b),c),d)---->递归
"""

#需求1;求一个已知列表中元素的和
list1 = [1,2,3,4,5]
def add(x,y):
    return x + y
result1 = reduce(add,list1)
print(result1)

result2 = reduce(lambda x,y:x + y,list1)
print(result2)

#需求2:将列表[1,3,5,7,9]变换成整数13579
"""
分析:
13 = 1 * 10 + 3
135 = 13 * 10 + 5
1357 = 135 * 10 + 7
13579 = 1357 * 10 + 9
"""
list2 = [1,3,5,7,9]
def fn(x,y):
    return x * 10 + y

result3 = reduce(fn,list2)
print(result3)

#需求3:
#结合map函数,实现一个将str转换为int的函数   int()

#思路:传进来一个字符串,返回一个对应的整数
def strToInt(s):
    digits = {"0":0,"1":1,"2":2,"3":3,"4":4}
    return digits[s]

#"23401"------>23401
r0 = map(strToInt,"23401")
print(list(r0))   #[2, 3, 4, 0, 1]

r1 = reduce(fn,map(strToInt,"23401"))
print(r1)   #23401
print(type(r1))   #<class 'int'>

3.filter()

代码演示:

"""
filter(function,序列)
作用:通过指定的条件过滤列表中的元素
工作原理:将传入的函数依次作用于列表中的每一个元素,根据返回的是True还是False决定元素是否需要保留
"""

#需求1:将列表中的偶数筛选出来
list1 = [1,2,3,4,5,6,7,8,9]
#作用:定义筛选的规则
def func(num):
    if num % 2 == 0:
        return  True
    return  False

result1  = filter(func,list1)
print(result1)
print(list(result1))  #[2, 4, 6, 8]

4.sorted()

代码演示:

#1.普通排序
#默认为升序排序,得到了的一个新的列表
list1 = [4,5,23,3,5,7]
result1 = sorted(list1)
print(list1)
print(result1)  #r[3, 4, 5, 5, 7, 23]

#2.按照绝对值进行排序
#默认为升序排序,排序的依据是所有元素的绝对值的大小
list2 = [4,5,-23,3,-5,7]
result2 = sorted(list2,key=abs)
print(result2)  #[3, 4, 5, -5, 7, -23]

#3.降序升序
list3 = [4,5,23,3,5,7]
result3 = sorted(list3,reverse=True)
print(result3)

#4.字符也可以实现排序
list4 = ["f","a","k","z"]
result4 = sorted(list4)
print(result4)

#5.自定义排序规则
#默认为升序排序
def myFunc(str):
    return len(str)
list5 = ["gsg","a","34535","efgg","562875678257fhjawhgj"]
result5 = sorted(list5,key=myFunc)
print(result5)

二、虚拟环境【掌握】

1, virtualenv的概述

virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实环境存在,
    并且可以同时有多个互相独立的Python虚拟环境,每个虚拟环境都可以营造一个干净
    的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。

虚拟环境有什么意义?
    如果我们要同时开发多个应用程序,应用A需要Django1.11,而应用B需要Django1.8怎么办?
    这种情况下,每个应用可能需要各自拥有一套“独立”的Python运行环境。
    virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。

2, virtualenv 的安装和使用

1.安装和创建virtualenv
    a,安装虚拟环境:安装virtualenv跟安装一般的Python库是一样的操作,直接使用pip命令就行了:
        pip install virtualenv
    b,创建虚拟环境:安装完成之后就可以使用virtualenv的命令来创建虚拟环境了,
          首先需要进入需要创建虚拟环境的文件夹,比如F盘的envs文件夹,
          然后使用以下命令创建一个虚拟环境,python版本的路径是可选的:
            virtualenv 虚拟环境名称 [-p python版本的路径]
            如:virtualenv env1 
2,启动虚拟环境:
        env1\Scripts\activate
    进入虚拟环境后:
        使用pip安装numpy模块
        创建test.py文件,并在文件中使用numpy模块
        在cmd命令窗口使用python test.py执行文件
            
3,退出虚拟环境(进入真实系统环境): 
        deactivate  
        (如果报错则使用:env1\Scripts\deactivate)
    退出虚拟环境后再执行test.py:
        在cmd命令窗口使用python test.py执行文件

3, virtualenvwrapper 的安装和使用

virtualenvwrapper是virtualenv的包装版,以后用这个,更加方便

Windows: pip install virtualenvwrapper-win
(Linux:pip install virtualenvwrapper)

创建:mkvirtualenv    虚拟环境名称  -p  python的路径 
删除:rmvirtualenv    虚拟环境名称
(注意:创建的虚拟环境放在用户目录下的Envs中)

进入:workon 虚拟环境名称
退出:deactivate 

4, pip常用命令

pip install xxx:安装xxx依赖包
pip uninstall xxx :卸载xxx包
pip list:查看所有依赖包
pip freeze:查看虚拟环境新安装的包
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容