`
skyfen
  • 浏览: 179142 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

常用的 Duck-Typing 约定

阅读更多

面的部分描述一些常见的python约定,在django中贯穿始终,在任何大一些的python库都的确存在。

Callable

python允许代码可以有许多途径被运行,任何东西都能像典型的函数标识可调用的一样,按相同的方式执行。所有函数,类,方法都是自动可调用的,像期望的一样,但是任意对象类实例也能被标识为可调用,只要提供一个单一方法。

__calll__(self[, ...])

当实例化对象像函数一样调用时,这个方法就开始执行。它和其他的成员函数很象,不同的地方就是被调用的方式。

>>> class Multiplier(object):
...     def __init__(self, factor):
...         self.factor = factor
...     def __call__(self, value):
...         return value * self.factor
...
>>> times2 = Multiplier(2)
>>> times2(5)
10
>>> times2(10)
20
>>> times3 = Multiplier(3)
>>> times3(10)
30

python也提供了一个内置函数来判定可调用(callable)的对象。 callable()函数只有一个参数,返回True或False。判断对象是否像函数一样可调用。

>>> class Basic(object):
...     pass
...
>>> class Callable(object):
...     def __call__(self):
...         return "Executed!"
...
>>> b = Basic()
>>> callable(b)
False
>>> c = Callable()
>>> callable(c)
True

字典

字 典是单一对象中的键值映射。大多数编程语言都有相同形式的字典类型,其他语言称之为“hashes", "maps"或"associative arrays(关联数组)",除了简单通过指定键来存取值,python的字典提供了许多方法,一边更好的操作底层的映射。为了像一个真正的字典的表现行 为,一个对象需要提供一些方法,文档参见python library reference。

__contains__(self, key)

通过使用in操作符, 如果指定的键存在于底层的映射中,则返回True,否则返回False。它从不返回异常。

__getitem__(self, key)

如果存在的华,则返回被指定键引用的值。如果键不在底层的映射中,则抛出一个异常KeyError。

__setitem__(self, key, value)

通过指定的键来保存指定的值,保存之后准备引用它。如果有一个映射存在,可用相同的键覆盖已经存在的值。

>>> class CaseInsensitiveDict(dict):
...     def __init__(self, **kwargs):
...         for key, value in kwargs.items():
...             self[key.lower()] = value
...     def __contains__(self, key):
...         return super(CaseInsensitiveDict, self).__contains__(key.lower())
...     def __getitem__(self, key):
...         return super(CaseInsensitiveDict, self).__getitem__(key.lower())
...     def __setitem__(self, key, value):
...         super(CaseInsensitiveDict, self).__setitem__(key.lower(), value)
...
>>> d = CaseInsensitiveDict(SpAm='eggs')
>>> 'spam' in d
True
>>> d['SPAM']
'eggs'
>>> d['sPaM'] = 'burger'
>>> d['SpAm']
'burger

字典也可以用作迭代使用,当代码循环字典的内容时,键用作列表。更多信息参见即将介绍的"Iterables"(迭代)。

分享到:
评论

相关推荐

    Python库 | blackduck-c-cpp-1.0.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:blackduck-c-cpp-1.0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | duck-xchem-0.0.29.tar.gz

    标题中的"PyPI 官网下载 | duck-xchem-0.0.29.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`duck-xchem`,其版本号为0.0.29,且是以tar.gz格式压缩的文件。PyPI是Python开发者分享和发布...

    Python库 | blackduck-0.0.34.tar.gz

    在本案例中,我们关注的是名为`blackduck-0.0.34.tar.gz`的压缩包,它包含了一个Python库的源代码。这个库被称为Black Duck,可能与开源代码合规性和安全检测有关。 Black Duck,通常指的是Synopsys公司的Black ...

    PyPI 官网下载 | blackduck-0.0.44-py3-none-any.whl

    标题中的"PyPI 官网下载 | blackduck-0.0.44-py3-none-any.whl"指的是一个在Python Package Index (PyPI) 官网上发布的软件包。PyPI是Python社区的一个核心资源,它允许开发者上传并分享他们的Python软件包,使得...

    基于Spring MVC/Spring的快速开发框架K-Duck-Core设计源码

    K-Duck-Core是一个开源、免费的Java快速开发框架,基于Spring MVC、Spring和Spring JdbcTemplate构建。该框架通过封装数据表为对象,自动处理数据访问层逻辑,减轻开发者编写DAO代码的负担,并要求使用SQL装配方式...

    项目:《会游泳的小黄鸭》点击链接预览___↓↓↓_yellow-duck-1.zip

    项目:《会游泳的小黄鸭》点击链接预览___↓↓↓_yellow-duck-1

    Mountain-Duck-4.10.3

    MacOS 将云存储挂载为本地磁盘Mountain_Duck_4.10.3

    assert-duck-type:Node.js 中函数参数的运行时类型断言

    "assert-duck-type" 是一个专门用于函数参数运行时类型检查的库,它基于 JavaScript 的鸭子类型(Duck Typing)概念,帮助开发者确保传入的参数符合预期的结构。本文将深入探讨鸭子类型、assert-duck-type 库的工作...

    rubber-duck-debugger:提供惊人的、功能齐全的调试工具的自定义元素

    $ bower install rubber-duck-debugger --save 或 。 用法 导入 Web Components 的 polyfill: < script src =" bower_components/webcomponentsjs/webcomponents.min.js " > </ script > 导入...

    duck-angular:一个用于引导和测试内存中的AngularJS视图和控制器的容器

    使用RequireJS和Duck-Angular的AngularJS应用示例位于 ,有两种组合: duck-angular当前依赖RequireJS。 duck-angular是用于引导和测试内存中AngularJS视图和控制器的容器:无需浏览器或外部进程。 设置 鸭角可...

    redux-duck-immer:帮助者适应鸭子-模块化-redux提案

    Redux-Duck-immer 受启发。 提供redux帮助器以实现建议。 减速器的状态由产生,以实现不变性。安装yarn add redux-duck-immer原料药定义动作类型import { defineType } from 'redux-duck-immer' ;/** * type Action...

    Duck-Generator:简易照片生成器

    《Duck-Generator:简易照片生成器》 鸭子发电机,顾名思义,是一款能够生成鸭子照片的简易应用程序。这款应用巧妙地结合了HTML、CSS和JavaScript三种核心技术,为用户提供了便捷的图片生成体验。下面我们将深入探讨...

    Google Duck-crx插件

    **谷歌Duck-crx插件详解** 谷歌Duck-crx插件是一款专为谷歌浏览器(Chrome)设计的扩展程序,其主要功能是在用户浏览Google网页时添加一只可爱的鸭子形象,为用户带来轻松愉快的上网体验。这款插件的设计语言为英语...

    Duck-Defender:用于抵御USB Rubber Ducky的小批量脚本

    "Duck-Defender" 是一个专门针对USB Rubber Ducky攻击的防御工具。USB Rubber Ducky,又称为“鸭子攻击器”,是一种外形类似普通USB闪存盘的设备,但其实是一个硬件黑客工具。它能够在插入电脑时快速执行预编程的...

    run-duck-run:发电机功能运行器

    const run = require ( 'run-duck-run' ) run ( foo , ( err ) => { if ( err ) { console . error ( err ) } else { console . log ( 'all good' ) } } ) ( ) // done cb function * foo ( ) { yield ...

    Duck Duck-开源

    用户可以根据个人习惯设置快捷键,以便在任何时刻快速调用启动器,无需鼠标,仅通过键盘就能启动常用应用。这种高度可定制化的快捷键设置,进一步提升了使用体验,尤其适合追求效率的用户。 除此之外,Duck Duck还...

    docker-duck-dns

    docker-duck-dns

    duckduckgo-voice-search:一个非常简单的duckduckgo语音搜索,用于懒于使用键盘的人。 只需用您的声音来搜索duckduckgo

    duckduckgo-voice-search(该项目处于归档状态) 一个非常简单的duckduckgo语音搜索,可让您懒于使用键盘的人。 只需用您的声音来搜索duckduckgo 一个简单的虚拟助手(该项目处于归档状态) 尝试 如何设置? 如果...

    Duck-Hunt-Mobile:ducky

    【Duck-Hunt-Mobile:ducky】是一款基于C#编程语言开发的移动版经典游戏《打鸭子》的复刻项目。在这个项目中,开发者利用C#的强大功能和灵活性,为用户提供了在移动设备上体验传统游戏的乐趣。下面将详细探讨这个...

Global site tag (gtag.js) - Google Analytics