【Beginning Python】抽象(未完)
【懒惰即是美德】
抽象意味着良好的可读性:说明你在努力做什么,而不是给出你正在如何做的细节。
【抽象和结构】
程序应该是非常抽象的,就像“下载网页、计算频率、打印每个单词的频率”一样易懂。翻译成程序就是:
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】抽象(未完)的更多相关文章
- [python]爬代理ip v2.0(未完待续)
爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...
- Python开发 標準內建方法 (未完代補)
abs(number) 絕對值 The abs() method takes a single argument: num - number whose absolute value is to ...
- 使用IntelliJ IDEA进行Python远程调试的需求(未完)
使用IntelliJ IDEA进行Python远程调试的需求(未完) 在研究深度学习Machlearning时,有时候需要借助ubuntu搭建的tensorflow环境,另外也有越来越多的运算程序只能 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- MVC丶 (未完待续······)
希望你看了此小随 可以实现自己的MVC框架 也祝所有的程序员身体健康一切安好 ...
- Day4-内置函数--未完待续,慢慢写
内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...
- CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)
一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...
- Beginning Python Chapter 1 Notes
James Payne(American)编写的<Beginning Python>中文译作<Python入门经典>,堪称是Python的经典著作. 当然安装Python是很简 ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
随机推荐
- Android 防破解技术简介
Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是随之而来的问题也越来越多,这其中比较令人头疼的问题就是:有些不法分子利用反编译技术破解 App,修改 ...
- ios 给UIImageView添加阴影
_borderView.layer.shadowColor = [UIColor grayColor].CGColor; _borderView.layer.shadowOffset = CGSize ...
- 《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言
原创文章,欢迎转载.转载请注明:关东升的博客 在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C语言,此外还可以使用C和C++语言,但是UI部分只能使用Objective ...
- R语言中的一些函数
1.控制输出数字的精度 format(123.123,digits=4) 输出4位数字123.1,如果整数超过4位,小数部分就全被略去. options(digits=4) 功能同上,不过在Rsess ...
- vue mixins的使用
官网传送 刚开始接触vue的时候,官网关于mixins的例子看了好几遍,发现还是不会用,包括vuex也是后来慢慢理解一点的,不过和vuex比起来.mixns还是很好理解,简单很多了 就我目前理解mix ...
- 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制
1.线程queue :会有锁 q=queue.Queue(3) q.get() q.put() 先进先出 队列后进先出 堆栈优先级队列 """先进先出 队列"& ...
- d3.js:数据可视化利器之快速入门
hello,data! 在进入d3.js之前,我们先用一个小例子回顾一下将数据可视化的基本流程. 任务 用横向柱状图来直观显示以下数据: var data = [10,15,23,78,57,29,3 ...
- HDFS基本命令行操作及上传文件的简单API
一.HDFS基本命令行操作: 1.HDFS集群修改SecondaryNameNode位置到hd09-2 (1)修改hdfs-site.xml <configuration> //配置元数据 ...
- 网络爬虫之scrapy框架设置代理
前戏 os.environ()简介 os.environ()可以获取到当前进程的环境变量,注意,是当前进程. 如果我们在一个程序中设置了环境变量,另一个程序是无法获取设置的那个变量的. 环境变量是以一 ...
- SSO详解(转)
转自:http://www.cnblogs.com/EzrealLiu/p/5559255.html 1. 摘要 SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂, ...