【懒惰即是美德】

抽象意味着良好的可读性:说明你在努力做什么,而不是给出你正在如何做的细节。

【抽象和结构】

程序应该是非常抽象的,就像“下载网页、计算频率、打印每个单词的频率”一样易懂。翻译成程序就是:

page = download_page()
freqs = compute_frequencies(page)
for word.freq in freqs:
print word.freq

【创建函数】

def hello(name):
return 'Hello,' + name + '!'
>>> print (hello('world'))
Hello,world!

记录函数

1、实例:

def hello(name):
'This is a hello world program!'
return 'Hello,' + name + '!'

访问方式1:内建的help函数。

>>> help(hello)
Help on function hello in module test: hello(name)
This is a hello world program!

访问方式2:用hello._doc_访问失败。

>>> hello._doc_
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute '_doc_'

已解决:doc两边的下划线有两个!!!即__doc__

并非真正函数的函数=返回None的函数

【Parameter magic(参数魔法)】

值从哪里来?

我能改变参数吗(指改变实参)? - 在函数内为参数赋予新值不会改变任何外部变量的值,将可变的数据结构比如列表作为参数时实际是传递引用!

1、为什么要改变参数?- 抽象化程序的好方式。

可以利用这个特点编写函数来改变数据结构。

一个简单的例子:

def init(data):
data['first'] = {}
data['middle'] = {}
data['last'] = {}

之后可以利用这个函数来初始化变量的数据结构。如下:

>>> from test import init
>>> lovepython = {}
>>> lovepython # 变量原始结构
{}
>>> init(lovepython)
>>> lovepython # 通过函数改变后的结构
{'first': {}, 'last': {}, 'middle': {}}

2、如果我的参数不可变呢?- 考虑传入数组。

关键字参数和默认参数

1、之前所用的参数都叫做“位置参数”,因为它们的位置很重要——甚至比它们的名字还要重要!

2、程序规模越大,关键字参数和默认参数的作用越大!

3、例如在下面的程序中,能辨别出谁是谁吗?

hi(1, 2, 4, 5)

但是如果使用关键字参数,就一目了然。(当然只是举例)

hi(name=1, age=2, city=4, born=5)

4、关键字参数更厉害地方在于可以给函数提供默认值。

5、混用位置参数和关键字参数的注意点:位置参数一定要放在前面!(尽量避免出现混用的情况)

收集参数

def f(k, *params);星号的意思就是“收集其余的位置参数,放进一个元组中(在这里这个元组叫做params)”。

但是有个问题是*params并不能收集关键字参数,那么如何收集关键字参数呢?答案是使用**params将关键字参数收集成字典:

def f(*collec_pospar, **collec_keypar):
print(collec_pospar)
print(collec_keypar)
>>> f(1, 2, 3, a=1, b=2, c=3)
(1, 2, 3)
{'b': 2, 'a': 1, 'c': 3}

反转过程

这个标题指的是“将参数收集为tuple和dict”的逆过程,也就是将dict和tuple分解成关键字参数和单个的参数。

例如,假设params = (1, 2, 4):

在作为函数参数的时候*params的结果是 1, 2, 4

对于dict也是同样的道理,只不过前置符号改为**罢了。

练习使用参数

【作用域】

【递归】

【小结】

【Beginning Python】抽象(未完)的更多相关文章

  1. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  2. Python开发 標準內建方法 (未完代補)

    abs(number)  絕對值  The abs() method takes a single argument: num - number whose absolute value is to ...

  3. 使用IntelliJ IDEA进行Python远程调试的需求(未完)

    使用IntelliJ IDEA进行Python远程调试的需求(未完) 在研究深度学习Machlearning时,有时候需要借助ubuntu搭建的tensorflow环境,另外也有越来越多的运算程序只能 ...

  4. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  5. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  6. Day4-内置函数--未完待续,慢慢写

    内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....

  7. Java开发中的23+2种设计模式学习个人笔记(未完待续)

    注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...

  8. CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)

    一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...

  9. Beginning Python Chapter 1 Notes

    James Payne(American)编写的<Beginning Python>中文译作<Python入门经典>,堪称是Python的经典著作. 当然安装Python是很简 ...

  10. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

随机推荐

  1. Android之Handler与AsyncTask的区别

    1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可 ...

  2. R语言中的聚类的使用

    这里的聚类主要用到K-Means和K-Medoide聚类.在进行聚类之前,为了避免不同参数之间量纲不同所造成的影响,先将数据进行(0-1)标准化 # 如参数weight data$weight < ...

  3. SignalR 循序渐进(四) Hub的生命周期以及IoC

    有阵子没更新这个系列了,最近太忙了.本篇带来的是Hub的生命周期以及IoC. 首先,Hub的生命周期,我们用一个Demo来看看: public class TestHub : Hub { public ...

  4. [报错] Xcode Error-Could not insert new outlet connection: Could not find any information for the class named "xxx"

    当从StoryBoard或xib中需要将控件绑定类文件时(OC中是.m文件,Swift中是.swift文件) 当按住control键将控件往类文件中拖拽后,填写控件的name后,点击connect时 ...

  5. CentOS下调整home和根分区大小的方法

    解决外挂硬盘的问题. 目标:将VolGroup-lv_home缩小到20G,并将剩余的空间添加给VolGroup-lv_root 1.首先查看磁盘使用情况[root@jb51.net~]# df -h ...

  6. 如何在 cmd 中打开设备管理器,如何找到打开其他设备的命令?

    Win + R 组合键后,输入 devmgmt.msc 即可. 任意打开一个软件,然后查看其命令行,找到该程序的实际进程名即可. 注意:需要打开的程序需要放在设置过环境变量的目录,确保执行 cmd 时 ...

  7. python中yield使用

    16.yield使用   列表推导与生成器表达式   当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] ...

  8. golang 中的定时器(timer),更巧妙的处理timeout

    今天看到kite项目中的一段代码,发现挺有意思的. // generateToken returns a JWT token string. Please see the URL for detail ...

  9. KVm中EPT逆向映射机制分析

    2017-05-30 前几天简要分析了linux remap机制,虽然还有些许瑕疵,但总算大致分析的比较清楚.今天分析下EPT下的逆向映射机制.EPT具体的工作流程可参考前面博文,本文对于EPT以及其 ...

  10. 1. testNG+Maven 环境搭建

    一:使用的工具 : TestNG 6.9.10 Maven 3.5 IDEA 二:创建maven项目,在pom.xml添加依赖 <?xml version="1.0" enc ...