元哥3天学Python--Day3

1. Input From Keyboard

  • input() ---> raw data as string
  • eval() ---> inpute gets evaluated

会根据输入的格式来转换相应的数据类型

2. Condition

if xxx:
  xxx
elif xxx:
  xxx
else:
  xxx

max = a if (a > b) else b

3. Loop

while xxx:
  xxx
else: //optional part
  xxx

for <variable> in <sequence>:
    <statements>
else: //optional part
    <statements>

for i in range(len(fibonacci)):
  xxx
  • break可以跳过else的部分
  • range(end) ---> 0 ~ end - 1
  • range(begin,end) ---> begin ~ end - 1
  • If you loop over a list, it's best to avoid changing the list in the loop body. ---> 用copy来for
colours = ["red"]
for i in colours[:]: //用copy来for
    if i == "red":
        colours += ["black"]
    if i == "black":
        colours += ["white"]
print(colours) //['red', 'black']

4. Function

  • default para & docstring
def Hello(name="everybody"): //default para
    """ Greets a person """ // docstring
    print("Hello " + name + "!")

Hello("Peter") //Hello Peter!
Hello() //Hello everybody!
print(Hello.__doc__) //Greets a person 
  • Return Values

没有return或者return后不接数据,函数返回None

  • Returning Multiple Values
return (lub, new)

5. File management

  • open & close & read

fobj = open("ad_lesbiam.txt", "r") // r:read --> optional

fobj = open("ad_lesbiam.txt")
for line in fobj:
    print(line.rstrip())
fobj.close()
  • write
fh = open("example.txt", "w")
fh.write("To write or not to write\nthat is the question!\n")
fh.close()
  • 使用with来自动close文件
with open("example.txt", "w") as fh:
    fh.write("To write or not to write\nthat is the question!\n")
  • 一次性read

readline() --> list
read() --> string

poem = open("ad_lesbiam.txt").readlines()
poem = open("ad_lesbiam.txt").read()
  • 设置当前读写位置

.seek(i) --> 移到 ith byte
.tell() --> 当前位置
.read(i) --> 从当前位置向后读i bytes

6. Modules

Every file, which has the file extension .py and consists of proper Python code, can be seen or is a module!

  • Import
import math
from math import * //same as above, not recommanded!
from math import sin, pi
import numpy as np //rename namespace
  • Design Module

文件名就是module名

  • Executing Modules as Scripts
if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

只有在run as sript时才运行,import时不运行

  • Package
  • It's possible to put several modules into a Package.
  • 在包含多个.py文件的文件夹下建一个__init__.py文件
from SimplePackage import a, b //包含a.py  b.py
import SimplePackage //错误!

7. Obeject-Oriented Programming

everything is a class in Python

class Robot:
    pass
  1. Attributes

储存在instance的一个dict里面__dict__

  1. Method

第一个参数要是self

  1. __init__ Method

对象创建时执行的初始化

class Robot:
 
    def __init__(self, name=None):
        self.name = name   
        
    def say_hi(self):
        if self.name:
            print("Hi, I am " + self.name)
        else:
            print("Hi, I am a robot without a name")

x = Robot()
x.say_hi() //Hi, I am a robot without a name
y = Robot("Marvin")
y.say_hi() //Hi, I am Marvin
  • Data Abstraction, Data Encapsulation, Data Hiding

    • Data Abstraction = Data Encapsulation + Data Hiding
    • Encapsulation is often accomplished by : Gettter & Setter
  • __str__ & __repr__

  • __str__ --> 能够让对象被str()使用,但返回结果不可通过eval()转回对象

  • __repr__ -->能够让对象被repr()使用,且返回结果可通过eval()转回对象

  • 当只有__str__定义时,str()可用但repr()不可用;当只有__repr__定义时,两个均可用

  • Public > Protected > Private

通过命名前的下划线来定义。。。

class Robot:
 
    def __init__(self, name=None, build_year=2000):
        self.__name = name
        self.__build_year = build_year
        
    def say_hi(self):
        if self.__name:
            print("Hi, I am " + self.__name)
        else:
            print("Hi, I am a robot without a name")
            
    def set_name(self, name):
        self.__name = name
        
    def get_name(self):
        return self.__name    

    def set_build_year(self, by):
        self.__build_year = by
        
    def get_build_year(self):
        return self.__build_year    
    
    def __repr__(self):
        return "Robot('" + self.__name + "', " +  str(self.__build_year) +  ")"

    def __str__(self):
        return "Name: " + self.__name + ", Build Year: " + 

8. Class and Instance Attributes

  • Static Method

即可以被class调用,也可以被instance调用
需要用@staticmethod指明,不需要第一个参数self

class Robot:
    __counter = 0
    
    def __init__(self):
        type(self).__counter += 1
        
    @staticmethod
    def RobotInstances():
        return Robot.__counter
  • Class Method

与Static Method的相同点:即可以被class调用,也可以被instance调用
不同点:第一个参数是class reference,因此方法中可以有class的信息

class Robot:
    __counter = 0
    
    def __init__(self):
        type(self).__counter += 1
        
    @classmethod
    def RobotInstances(cls):
        return cls, Robot.__counter

9. Property

  • property decoration @property
  • 充当getter & setter的角色
  • 无getter & setter的情况下又能实现他们的功能
class P:

    def __init__(self,x):
        self.x = x

    @property
    def x(self): //getter
        return self.__x

    @x.setter
    def x(self, x): //setter
        if x < 0:
            self.__x = 0
        elif x > 1000:
            self.__x = 1000
        else:
            self.__x = x
  • 使用情况
  • 如果某个attr需要被user使用,则设计为public并定义它对应的property
  • 如果不需要被user使用,则设计为private

10. Inheritance

  • 语法
class Person:

    def __init__(self, first, last):
        self.firstname = first
        self.lastname = last

    def Name(self):
        return self.firstname + " " + self.lastname

class Employee(Person): //inheritance

    def __init__(self, first, last, staffnum):
        Person.__init__(self,first, last) // or super().__init__(first, last)
        self.staffnumber = staffnum

    def GetEmployee(self):
        return self.Name() + ", " +  self.staffnumber

x = Person("Marge", "Simpson")
y = Employee("Homer", "Simpson", "1007")

print(x.Name())
print(y.GetEmployee())
  • Overloading & Overiding

    • Overriding -->对继承下来的方法进行新的定义

    但是方法名,参数,返回值类型保持不变

class Person:

    def __init__(self, first, last, age):
        self.firstname = first
        self.lastname = last
        self.age = age

    def __str__(self):
        return self.firstname + " " + self.lastname + ", " + str(self.age)

class Employee(Person):

    def __init__(self, first, last, age, staffnum): //overriding
        super().__init__(first, last, age)
        self.staffnumber = staffnum

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

推荐阅读更多精彩内容