07笨方法学Python|ex37续-ex42

ex37 symbol review 续

data type

函数isinstance() 或者 type()可以获取变量类别。

  • True/False
  • None

Assigning a value of None to a variable is one way to reset it to its original, empty state.
python - What is a None value? - Stack Overflow

所有的变量的初始状态都是none,如字面意思,无。当我们定义一个变量,比如 aa= “hello world”, 我们做的是填上aa变量的空白,给他一个值“ hello world”。
按照经典比喻,所有变量的名字如同标签,可以贴下撕掉换地方。那么这一步也可以说,aa 这个标签 曾经贴在了 none 的地方,现在我们用 aa= “hello world” 这句命令,让 aa 这个标签 贴到了 “hello world”这个地方。

  • Strings
  • Numbers
    int:整数,integer
    float:浮点数
    complex:复数
  • sequence
    lists:有序清单,从0开始,可更改, (element1,element2,.. )
    tuples:有序清单,从0开始,不可更改, [element1, element2,... ]
    dictionary:无序清单,可更改,{key1:value1, key2:value2,...}

string escape sequence

复习符号 | Learn Python the Hard Way 中文版

printf("stackoverflow\rnine")
ninekoverflow

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great

参考:newline - What are carriage return, linefeed, and form feed? - Stack Overflow
但由于三大系统中的回车与换行默认设置不一样,见回车和换行 - 阮一峰的网络日志,于是我的windows系统下,效果跟理论不一样。。

formfeed

垂直的tab,在我电脑里显示是这样
vertical tab

carriage, 暂时理解为定义此处为句首,于是之前的都不显示了,效果如图
carriage return

string formats & operations

比较简单,详见
复习符号 | Learn Python the Hard Way 中文版

  • 关于dot,这篇写的超级可爱。1. The dot notation — Object-Oriented Programming in Python
    简单来说,这个dot,就是用于连接 以下 的符号

    • object和其method
    • object 和其attribute

    比如之前在ex15学过的file object。它有各种method,如read,write,truncate等等,连接方式正是用dot,写作fileobject.write()

  • @ class method,先认识这是用于提示class method,后续再看!

ex38 list method + OOP

先复习list相关,ex32,在05笨方法学Python|ex27-ex34 - 简书

  • split
    split里的两个引号(单引号,双引号都可以)之间要加空格;

  • method的解读
    mystuff.append("hello") 等同于append (mystuff, "hello")
    ' '.join(things) 等同于join(' ', things),解读为 Join things with ‘ ‘ between them.

  • 区分attribute,method,object,class的概念
    这里的解释真是通俗易懂啊~ Python 101: Object Oriented Programming part 1 – The Renaissance Developer – Medium
    object 可以类比成我们真实世界里的各种object,比如车,狗,蛋糕等等;
    每个object都会有两个主要特点:数据 data 和 行为 behavior。比如一辆车,它的数据是车长,车高,耗油量等等;它的行为有 启动,加速,倒车,停止等等。
    在python的世界里,我们把 数据 叫做 attribute,把行为 叫做 method.
    所有的车基本都是四个轮子,有引擎,有车盖等等,这都来源于同样的 原型prototype,model模型或者blueprint蓝图,这个原型模板就是class. 在class里我们定义其中的object应该有哪些数据和哪些行为。

  • OOP,object-oriented programming是什么?
    一种程序设计方法,框架。
    以下学自维基百科 面向对象程序设计
    程序有两种设计方法:

    1. procedeure-oriented programming 或者叫 functional programming,围绕函数构建,即给电脑一个一个的指令去做;
    2. object-oriented programming,OOP,面向对象编程,围绕object构建。各个objects互相独立,又可各自调用。每个object 可以输入,处理,输出。
  • 为什么说OOP好呢?
    它有四大特点:

    • Encapsulation可封装:传递更快,保护代码
    • Data Abstraction抽象:去掉细节,简化问题
    • Polymorphism多态:衍生广
    • Inheritance 可继承:代码可重复利用
  • OOP初窥
    Object Oriented Programming · A Byte of Python
    Python 101: Object Oriented Programming part 1 – The Renaissance Developer – Medium
    Python Tutorial: Object Oriented Programming
    变量self:约定俗成这就是用作object的变量。
    方法_int_ ,开始一个新的object,第一个就要用它。
    装饰符@classmethod,提供快捷键

class Person:
    def __init__(self, name):
        self.name = name

    def say_hi(self):
        print('Hello, my name is', self.name)

p = Person('Swaroop')
p.say_hi()
# The previous 2 lines can also be written as
# Person().say_hi()
  • What’s the relationship between dir(something) and the “class” of something?
    dir(something)会列举出这个object对象的所有attributes.而‘class’ of sth就是指这个对象的type 类别。
>> a = 1
>>> dir(a)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> type(a)
<type 'int'>
>>> 

上面这个例子来自In Python, what’s the relationship between dir (something) and the “class” of something? - Quora

ex39 dicts

dict 是无序的 数组。
ordereddict 有序的数组,见OrderedDict - Python Module of the Week

ex39_test hashmap

在线中文版字典,可爱的字典 | Learn Python the Hard Way 中文版比我手头的英文版多出来一大段代码,叫做hashmap,有难度,待研究。

ex40

已经知道oop大概是什么了,看到shawn的讲解,很是佩服能把事情说得这么清楚。喜欢他把dict,module,class放一起比较,很有启发。
字典,模块,类,都可以实现“get sth from sth”:

# dict style
mystuff['apples']

# module style
mystuff.apples()
print mystuff.tangerine

# class style
thing = MyStuff()
thing.apples()
print thing.tangerine

从这种对比,可以看到,class比module更棒的地方,就在于module只能用一次,而class可以想用几次用几次,这里叫thing,下次加name,无限次使用。
一个错误总结

TypeError: object() takes no parameters when creating an object

原因是:__init__ ,注意这里是左右各两个下划线

ex41

  • string method
    关于string字符串,有许多method行为,可见 5.6.1 string method — Python 2.7.14 documentation

  • string.strip([chars]):作用是“脱掉”指定的字符chars。如果不指定字符,即string.strip(),那么默认去掉原字符串前后的空格。
    比如

string = ' xoxo love xoxo   '

# Leading whitepsace are removed
print(string.strip())

print(string.strip(' xoxoe'))

# Argument doesn't contain space
# No characters are removed.
print(string.strip('sti'))

string = 'android is awesome'
print(string.strip('an'))

结果是

xoxo love xoxo
lov
 xoxo love xoxo   
droid is awesome

例子来自Python String strip()

  • string.capitalize()
    作用是将字符串的首字母大写。如果字符串的第一个字符不是字母,那什么也不会被改变。
  • string.count
    官方教程里写作str.count(sub[, start[, end]]),等同于string.count(substring, start=..., end=...),这样写法的意思是:start部分和end部分都是可写可不写的。
    这个method的作用是:返回某个substring在string里的出现次数。
    所以练习中snippet.count("%%%") = %%%snippet出现的次数。
  • random模块
    这个模块很有意思,在给定的范围里生成随机(random)的元素~
    这节练习里出现过的有:
    random.randint(a,b): 返回一个[a,b]之间的整数,包括a和b;
    random.sample(population,k):返回一个population序列的子序列,长度为k.
    random.shuffle(x[, random]): 将list x 中的元素打乱顺序重排,即“洗牌”。注意它的说明:shuffle list x in place; return None.来自python - Shuffling a list of objects - Stack Overflow
    参考:9.6. random — Generate pseudo-random numbers — Python 2.7.14 documentation
  • result = sentence[:]
    这句的作用是 复制sentence这个列表给result.
    冒号表示python中的切片功能,可以参考How to Slice Lists/Arrays and Tuples in Python | Python Central
  • question,answer = convert(snippet,phrase)
    这句话我想了很久,后来看到https://stackoverflow.com/a/23727814/9313875 这个答案,明白了。
    1. for sentence in snippet,phrase:这句话其实包含了两个循环,因为snippet和phrase是两个不同的列表,因此会分别进行循环。
    2. results是什么?一个list,包含两个字符串
    3. list的一种读取方法是这样的:对于包含N个元素的list,可以用a1,a2,a3,...aN = list来读取
>>> list = [1,2,3,4]
>>> a,b,c,d = list
>>> print a
1
>>> print c
3
>>> e,f = list
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack 
#list里一共有4个元素,而e,f才2个变量,调不出来,报错。
  • DEBUG帮助理解代码:
DEBUG = 1
if DEBUG:
  print "snippet: " , snippet
  print "phrase: ", phrase
  print "results:",convert(snippet,phrase)  #这里不能写print "results:",results. 因为叫results这个名字的变量其实并不存在~
  • 关于退出
    在windows 10系统下是 ctrl+Z,而不是作者写的ctrl+D.

  • 理解代码
    过了ex40后果然难度加大了不少,哈哈。
    书上的代码没有bug,保证单词全部正确输入,便可以正常运行。我曾经因为capitalize这个单词拼错,卡了3天,唉。。
    感谢这篇博客,帮我理清了几个重要问题!这次是中文的!Learn Python The Hard Way 习题41详解 - CSDN博客,作者还画了代码的流程图,好办法!画个代码地图,也是shawn非常提倡的学习方法。

ex42

  1. 为什么要写成class(object)
    这样写叫做new style class,用以区分old style class.这是个历史原因,而且只是python2里有这个问题。在python2的发展历史中,关于class的继承性的bug发现得太晚了,于是如果想让我们的child class能顺利继承parent class里的性质,必须要写成class(object),不知道他们为什么一定要选object这个词,换个词就不容易晕了。
    anyway,可以把它当成一个固定写法,如此class才能继承object里的所有method。更简单来说,对于我这样的菜鸟,只要初次定义class,就写成这个格式就好了。
    详情可参考:
  2. 关于python super()
    学习自Python super()
    主要功能有两个:
  • 可以间接指向父类,即用super(),就不必再明写出父类的类名,很实用;
  • 实现多次继承,多个sibling class的时候必备。
    这个例子很清楚:
class Animal:
  def __init__(self, animalName):
    print(animalName, 'is an animal.');

class Mammal(Animal):
  def __init__(self, mammalName):
    print(mammalName, 'is a warm-blooded animal.')
    super().__init__(mammalName)
    
class NonWingedMammal(Mammal):
  def __init__(self, NonWingedMammalName):
    print(NonWingedMammalName, "can't fly.")
    super().__init__(NonWingedMammalName)

class NonMarineMammal(Mammal):
  def __init__(self, NonMarineMammalName):
    print(NonMarineMammalName, "can't swim.")
    super().__init__(NonMarineMammalName)

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,709评论 0 9
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,783评论 0 38
  • 在如今快速发展的社会,感情这东西总是来去匆匆,很多感情总是不经意间就消逝于平凡的生活。 读完了杨绛先生的《我们...
    映迹海阅读 387评论 0 2
  • 亲爱的 让你说喜欢我的那一刻起 我就发誓 如果你不离 我就不弃 !之后 你能天天能陪我聊天 我很是开心快乐 我恨...
    我要做她的男人阅读 196评论 0 0
  • 姓名:陈权 公司:青柠养车 【知~学习】 《六项精进》大纲56遍 共89遍 《活法叁》音频打卡第18天 《轻课口语...
    水青柠阅读 182评论 0 0