• 北京:构筑“三维”立体防护网 保险业对非法集资说“NO” 2019-03-17
  • 800万尾鱼苗放流天津蓟州于桥水库 2019-03-17
  • 推动第三代杂交水稻研究 2019-03-06
  • 奇闻怪事:瑶族怪异风俗习惯之烟袋定情 2019-03-06
  • 2018央视春晚提供4K超高清点播 2019-02-04
  • 空腹吃荔枝致孩子死亡?西安专家教你咋吃荔枝最科学 2019-02-04
  • 【理上网来·辉煌十九大】写好建设现代化经济体系这篇命题文章 2019-02-02
  • 上周济南8个项目推出新房源 1个纯新项目上市 ——凤凰网房产济南 2019-02-02
  • 吉林辽源市凝聚人才强市“大磁场” 2019-01-29
  • 日产劲客智联版上市 13.23万起售车载互联升级 2019-01-17
  • 出海记|磨合三年终满足苛刻要求 中国企业获得以色列大单} 2019-01-17
  • 相思湖边包鱼粽 孝心满满全家欢 2018-12-22
  • 第五届西安(浐灞)金融高峰论坛召开 2018-12-22
  • 一种酵母菌会“投硬币”随机决定基因表达 2018-12-14
  • 计划经济政府是不能管的,但习近平说,政府要管好经济工作,这是当和人民交付的使命,你认为怎么样? 2018-12-14
  • 北美冰球打架: 冰球打架视频

    北京 切换校区

    全国24小时免费热线

    400-009-1906

    从A到Z,26个实用Python???函数速览

    时间:2018-11-16   来源:尚学堂   阅读:298

    Python是世界上受欢迎的按需编程语言之一,因为:

    ♦? 它容易学习
    ♦? 它用途广泛
    ♦? 它有一大堆??楹涂?/span>

     

    作为一名数据科学家,使用Python称得上是我的家常便饭。一路走来,现在我已经搜集了不少有用的小技巧,是时候该把它们分享给大家了!

     

    在这里,我会用从字母A开始,到Z结束,简单介绍一些常用技巧。它们大多是我在日常工作中偶然发现的,部分来自Python标准库文档和其他人的总结。

     

    all or any

    Python之所以这么流行,离不开它强大的可读性和表现力。人们经??嫘Τ芇ython是“可执行的伪代码”,虽然听起来让人不太舒服,但当真正编写代码时,你会发现自己好像真的没什么反驳的“底气”:

    x = [True, True, False]
    if any(x):
    print("At least one True")
    if all(x):
    print("Not one False")
    if any(x) and not all(x):
    print("At least one True and one False")

     

    bashplotlib

    你想在终端绘制基础图吗?

    $ pip install bashplotlib

    一个命令搞定没有GUI情况下的数据可视化。

     

    collections

    Python拥有一些内置的数据类型,但有时它们并不符合我们的需求。幸运的是,Python标准库有一个collections???,它在str, int, list, tuple, set, dict等数据类型的基础上提供了额外的数据类型。

    from collections import OrderedDict, Counter
    # 记住添加key的顺序!
    x = OrderedDict(a=1, b=2, c=3)
    # 计算每个字符的频率
    y = Counter("Hello World!")

     

    dir

    在Python中,我们该怎么查看对象及其属性?答案是使用dir()函数。

    >>> dir()
    >>> dir("Hello World")
    >>> dir(dir)

    当你正以交互方式运行Python,并动态探索正在使用的对象的??槭?,这会是一个非常有用的函数。

     

    emoji

    是的,没有表情包的代码有什么灵魂?

    from emoji import emojize
    print(emojize(":thumbs_up:"))

     

    from__future__ import

    Python的更新迭代比较频繁,它的每个新版本都会增加一些新的功能,或是对旧版本做一些调整,修改某些bug——这意味着有些改动是不兼容旧版本的。

    为了让以前能正常运行的代码在新版本中也能用,我们可以调用Python的__future__???,把新版本的特性导入到当前版本。

    from __future__ import
    print_functionprint("Hello World!")

     

    geopy

    对于程序员来说,地理位置可能是一个颇具挑战的领域,但geopy??榭梢匀谜龉瘫涞梅浅<虻?。

    $ pip install geopy

    它提供一系列不同地理编码服务的API,能让你轻松获得全球某个地区的国家、城市、完整街道地址、纬度、经度甚至海拔信息。

    它还包含一个有用的距离类,能测量两个位置之间的距离。

    from geopy import GoogleV3
    place = "221b Baker Street, London"
    location = GoogleV3().geocode(place)
    print(location.address)
    print(location.location)

     

    howdoi

    有时候,你可能刚看过某个问题的解决办法,但一上手又全忘了。在这种情况下,如果你既不想离开终端,又想上StackOverflow去查,该怎么办?

    你只需这个命令行工具:

    $ pip install howdoi

    无论你有什么问题,它都会尽力回答。

    $ howdoi vertical align css
    $ howdoi for loop in java
    $ howdoi undo commits in git

    需要注意的是,虽然它的答案是StackOverflow置顶答案的删减版,但这并不意味着它就百分百有用。

    $ howdoi exit vim

     

    inspect

    Python的inspect??榭梢约觳槟?榈囊恍┗拘畔?,它主要有4个用处:类型检查、获取源码、获取类或函数的参数的信息、解析堆栈。

    下面是用inspect.getsource()打印源码的一个示例,它还能用inspect.getmodule()打印自定义???。

    import inspect
    print(inspect.getsource(inspect.getsource))
    print(inspect.getmodule(inspect.getmodule))
    print(inspect.currentframe().f_lineno)

    除了以上用途,检查??橛兄谖颐歉玫乩斫獯?,编写可维护代码。

     

    Jedi

    Jedi是一个自动完成/静态分析库,它能使代码编写速度更快、效率更高。

    如果你不是IDE开发人员,你可能只是想把Jedi用作浏览器插件或在shell中使用。这是做得到的,详情可以阅读这篇介绍。

     

    **kwargs

    无论你学习的是什么编程语言,你都会遇到那么几个很难理解的知识点。在Python中,**kwargs语法算得上是其中的一个。

    字典对象前面的双星号允许你将该字典的内容作为命名参数传递给函数,字典的键是参数名称,值是传递给函数的值。

    dictionary = {"a": 1, "b": 2}def someFunction(a, b): print(a + b) return# 这样做效果同上someFunction(**dictionary)someFunction(a=1, b=2)

    当你想要编写可以处理未预先定义的命名参数的函数时,这个??楹苡杏?。

     

    List comprehensions

    列表解析式相信是很多人喜欢Python的一个理由。这些表达式可以很容易地编写非常干净的代码,几乎就像自然语言。

    dictionary = {"a": 1, "b": 2}
    def someFunction(a, b):
    print(a + b)
    return
    # 这样做效果同上
    someFunction(**dictionary)
    someFunction(a=1, b=2)

     

    map

    Python通过许多内置功能支持函数式编程。其中很有用的是map()函数——尤其是和lambda函数结合使用。

    x = [1, 2, 3]
    y = map(lambda x : x + 1 , x)
    # 打印出[2,3,4]
    print(list(y))

    在上面的示例中,map()将简单的lambda函数应用于每个元素x。它返回一个map对象,可以将其转换为某个可迭代对象,例如list或tuple。

     

    newspaper3k

    如果你之前从没听说过newspaper3k,那这个??榭赡芑崛媚愕难矍耙涣?。

    这是一个用于文章提取的库,它允许你从大量国际出版物中检索新闻文章和相关的元数据,如图像、文本和作者姓名。它甚至还有一些内置的NLP函数。

     

    Operator overloading

    Python支持操作符重载。虽然听起来很专业,但它的概念其实很简单,你有没有想过,为什么Python允许我们用+这个操作符添加数字和连接字符串?

    这其实就是实践中的操作符重载。你可以按自己的需求定义使用操作符符号的对象,然后把它们放进代码中。

    class Thing:
    def __init__(self, value):
    self.__value = value
    def __gt__(self, other):
    return self.__value > other.__value
    def __lt__(self, other):
    return self.__value < other.__value
    something = Thing(100)
    nothing = Thing(0)
    # True
    something > nothing
    # False
    something < nothing
    # Error
    something + nothing

     

    pprint

    Python的pprint??樘峁┝丝梢园凑漳掣龈袷秸返南允緋ython已知类型数据的一种方法,这种格式可被解析器解析,又很易读,称得上是Python开发人员必备方法。

    import requests
    import pprint
    url = 'https://randomuser.me/api/?results=1'
    users = requests.get(url).json()
    pprint.pprint(users)

     

    Queue

    Queue??槭荘ython中提供队列操作的???,它为支持多线程操作提供了诸多便利。

    这个结构的规则是“先进先出”。其中,“先进先出”(FIFO)意味着队列允许我们按照添加顺序检索对象?!昂蠼瘸觥?LIFO)则允许我们访问最新添加的对象。而PriorityQueue是看优先级队列级别,谁更低,谁先出来。

     

    __repr__

    在Python中定义类或对象时,提供一种将该对象表示为字符串的“正规”方法会很有用。比如:

    >>> file = open('file.txt', 'r')
    >>> print(file)
    <open file 'file.txt', mode 'r' at 0x10d30aaf0>

    这有利于更便捷地debug。如果你要把它放进定义的类:

    class someClass:
    def __repr__(self):
    return "<some description here>"
    someInstance = someClass()
    # prints <some description here>
    print(someInstance)

     

    sh

    Python是一种很棒的脚本语言,但是如果无论写什么脚本都要用它的标准os和子进程库,这就太不自由了。

    sh是一个成熟的Python子进程接口,允许你像调用函数一样调用任何程序。

    from sh import *
    sh.pwd()
    sh.mkdir('new_folder')
    sh.touch('new_file.txt')
    sh.whoami()
    sh.echo('This is great!')

     

    Type hints

    Python是一种动态类语言:定义变量、函数、类等时,我们不需要指定数据类型。

    虽然这种做法大大缩短了开发用时,但是一旦写了那么多代码,我们难免会忘记每个类型具体是什么,这时,如果我们再回头仔细阅读,就太麻烦了。

    从Python 3.5开始,你可以选择在定义函数时提供类型标注提示:

    def addTwo(x : Int) -> Int:
    return x + 2

    你还可以定义类型别名:

    from typing import List
    Vector = List[float]
    Matrix = List[Vector]
    def addMatrix(a : Matrix, b : Matrix) -> Matrix:
    result = []
    for i,row in enumerate(a):
    result_row =[]
    for j, col in enumerate(row):
    result_row += [a[i][j] + b[i][j]]
    result += [result_row]
    return result
    x = [[1.0, 0.0], [0.0, 1.0]]
    y = [[2.0, 1.0], [0.0, -2.0]]
    z = addMatrix(x, y)

    虽然不是强制性的,但类型注释可以让你的代码更容易理解。此外,它还允许我们在运行类型检查工具是捕获那些杂散的TypeErrors,这对于大型复杂项目开发是个帮助。

     

    UUID

    生成通用唯一标识符(UUID)最方便的做法是通过Python标准库的uuid???。它生成重复ID的概率非常低,不到十亿分之一。

    import uuid
    user_id = uuid.uuid4()
    print(user_id)

    上述代码会创建一个随机的128位数字,它几乎肯定是唯一的。事实上,我们可以用它生成超过2122个可能的UUID,感受一下这个数量:5,000,000,000,000,000,000,000,000,000,000,000,000,000。

     

    Virtual environments

    通常情况下,我们会用一个版本的Python处理多个项目,但有时不同项目,甚至一个项目都会用到不同版本的python、不同的包,我们该怎么办呢?

    Python对虚拟环境的支持可以帮我们解决这个问题:

    python -m venv my-project
    source my-project/bin/activate
    pip install all-the-modules

     

    wikipedia

    我们可以通过维基百科的API以编程方式访问大量免费知识,非常方便。

    import wikipedia
    result = wikipedia.page('freeCodeCamp')
    print(result.summary)
    for link in result.links:
    print(link)

    和真实网站一样,该??樘峁┒远嘀钟镅缘闹С?、消歧义页、随机页面检索,甚至还有donate()捐款。

     

    xkcd

    Python这么流行,幽默元素自然必不可少,毕竟它的名字来自英国超现实幽默表演团体Monty Python(巨蟒剧团)。它的大部分官方文档都隐藏着这个彩蛋。

    输入:

    import antigravity

    你会看到:

    ?大数据

    地面:你上天了!咋做到的?

    天上:Python!

    天上:我昨晚学会了Python!太简单啦!—— 只要写print "Hello World!"就能输出Hello World!

    地面:喵喵喵?动态类型?泛空格符?

    天上:加入我们吧!编程又成了乐事!这里是个全新的世界!

    地面:那你是咋上去的呀?

    天上:我只是写了import antigravity……

    地面:就这?

    天上:然后为了做对比,我又把药柜里的药全嗑了。但是我觉得还是Python让我“升天”。

     

    YAML

    YAML全称YAML Is Not Markup Language,它是一种数据格式化语言,非常简洁和强大。

    YAML被很多人认为是可以超越的xml和JSON的文件格式。对比XML,除了拥有XML的众多优点外,它足够简单,易于使用。而对于JSON,YAML可以写成规范化的配置文件。

    安装yaml??椋?/span>

    $ pip install pyyaml

    导入到项目中:

    import yaml

    PyYAML允许你存储任何数据类型的Python对象,以及任何用户定义类的实例。

     

    zip

    在Python中,zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

    keys = ['a', 'b', 'c']
    vals = [1, 2, 3]
    zipped = dict(zip(keys, vals))

    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。(在Python 3.x中,为了减少内存,zip()返回的是一个对象)

    相关资讯

    • 北京校区
    • 山西校区
    • 郑州校区
    • 武汉校区
    • 四川校区
    • 长沙校区
    • 深圳校区
    • 上海校区
    • 广州校区
    • 保定招生办

    北京海淀区校区(总部):北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂
    北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
    咨询电话:400-009-1906 / 010-56233821
    面授课程: JavaEE培训、 大数据就业班培训、 大数据云计算周末班培训、 零基础大数据连读班培训、 大数据云计算高手班培训、 人工智能周末班培训、人工智能+Python全栈培训、 H5+PHP全栈工程师培训

    山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

    郑州学区地址:河南电子商务产业园6号楼4层407
    咨询电话:0371-55177956

    武汉学区地址:湖北省武汉市江夏区江夏大道26号 宏信悦谷创业园4楼
    咨询电话:027-87989193

    四川学区地址:成都市高新区锦晖西一街99号布鲁明顿大厦2栋1003室
    咨询电话:028-65176856 / 13880900114

    网址://www.cssxt.com/
    咨询电话:0731-83072091

    深圳校区地址:深圳市宝安区航城街道航城大道航城创新创业园A4栋210(固戍地铁站C出口)
    咨询电话:0755-23061965 / 18898413781

    上海尚学堂松江校区地址:上海市松江区荣乐东路2369弄45号绿地伯顿大厦2层
    咨询电话:021-67690939

    广州校区地址:广州市天河区元岗横路31号慧通产业广场B区B1栋6楼尚学堂(地铁3号线或6号线到“天河客运站”D出口,右拐直走约800米)
    咨询电话:020-2989 6995

    保定招生办公室

    地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

    电话:15132423123

    Copyright 2006-2019 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183  
    媒体联系:18610174079 闫老师  

    Java基础班,免费试学三周

  • 北京:构筑“三维”立体防护网 保险业对非法集资说“NO” 2019-03-17
  • 800万尾鱼苗放流天津蓟州于桥水库 2019-03-17
  • 推动第三代杂交水稻研究 2019-03-06
  • 奇闻怪事:瑶族怪异风俗习惯之烟袋定情 2019-03-06
  • 2018央视春晚提供4K超高清点播 2019-02-04
  • 空腹吃荔枝致孩子死亡?西安专家教你咋吃荔枝最科学 2019-02-04
  • 【理上网来·辉煌十九大】写好建设现代化经济体系这篇命题文章 2019-02-02
  • 上周济南8个项目推出新房源 1个纯新项目上市 ——凤凰网房产济南 2019-02-02
  • 吉林辽源市凝聚人才强市“大磁场” 2019-01-29
  • 日产劲客智联版上市 13.23万起售车载互联升级 2019-01-17
  • 出海记|磨合三年终满足苛刻要求 中国企业获得以色列大单} 2019-01-17
  • 相思湖边包鱼粽 孝心满满全家欢 2018-12-22
  • 第五届西安(浐灞)金融高峰论坛召开 2018-12-22
  • 一种酵母菌会“投硬币”随机决定基因表达 2018-12-14
  • 计划经济政府是不能管的,但习近平说,政府要管好经济工作,这是当和人民交付的使命,你认为怎么样? 2018-12-14