Python之旅(第三周)

两大对小白的难题函数和对象。首先对不住大家了在上周对函数的介绍没有补充完整,这周先补充一下函数的知识点。

参数分类

默认参数 在写函数的时候直接给参数默认一个值,在没有赋予其他的值得时候,按照默认值来执行程序

def pow(x, n = 2):

    r = 1
    while n > 0:
        r *= x
        n -= 1
    return r
注:必选参数必须在前面,默认参数在后

可以变参数和关键字参数 定义函数时,有时候我们不确定调用的时候会传递多少个参数,此时我们就可以使用可变参数来定义,后期需要几个我们就定义,一般是以元祖或者列表的形式呈现

*args argsFunc 中匹配完定义好的参数,剩余的参数以元组的形式存储在 args(args 名称你可以自行定义),因此在上述程序中只要你传入不小于 1 个参数,该函数都会接受,当然你也可以直接定义只接受可变参数,你就可以自由传递你的参数
*kwargs 形参名前加两个表示,参数在函数内部将被存放在以形式名为标识符的 dictionary 中,这时调用函数的方法则需要采用 arg1 = value1,arg2 = value2这样的形式

我把 args 称作为数组参数,*kwargs 称作为字典参数

下面举个例子给大家:

def say_hello(** kwargs):
    if 'name' in kwargs:
        print(' 你好,%s!'% kwargs['name'])
    elif 'age' in kwargs :
        age = kwargs['age']
        if age <= 16:
            print('你是一个小屁孩')
        else :
            print('你是一个成年人')
    else:
        print('请输入你的个人信息!')

def main():
    say_hello(name = '娜美',age = 16)
    param= {'name':'王大锤','age':'12','tel':'124567789'}
    # 如果想一个字典传为参数,需要在前面加上**
    say_hello(**param)
    #如果希望传入的是一个列表或者元祖,需要在前面加上*
    #my list = [1,2,3,4]
    #my_sum(*my_list)

if __name__ == '__main__':
    main()

命名关键字参数 参数中有* 存在,后面的传参数必须给参数名。如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。下面举个列子:

def foo ( a , b , c  , * , name , age):

    print(a + b + c)
    print(name,':',age)

调用方法

 foo('3, 2, 3, name='jack', age=25)

注:*不是参数,而是分隔符。如缺少*,python解释器将无法识别位置参数和命名关键字参数

对象

@property 修饰器,包装器 主要是解决权限问题。将属性命名以单下划线开头,通过修饰来暗示属性是受保护的,不建议外界直接访问

class Names(object):
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name


class Manager(Names):
    def __init__(self, name, month):
        super().__init__(name)
        self._month = month

    @property
    def month(self):
        return self._month

    @month.setter
    def month(self,month):
        self._month = month

    def m_money(self):
        print('%s经理工作%d个月得到工资:%d' % (self._name, self._month, self._month * 15000))


class Programmer(Names):
    def __init__(self, name, hour):
        super().__init__(name)
        self._hour = hour

    # getter - 访问器
    @property
    def hour(self):
        return self._hour

    # setter - 修改器
    @hour.setter
    def hour(self,hour):
        self._hour = hour

    def u_money(self):
        print('%s工程师工作%d小时得到工资:%d元' % (self._name, self._hour, self._hour * 150))


class Sale(Names):
    def __init__(self, name, sums):
        super().__init__(name)
        self._sums = sums

    @property
    def sums(self):
        return self._sums

    @sums.setter
    def sums(self, sums):
        self._sums = sums

    def s_money(self):
        print('%s销售人员销售金额%d,底薪加提成的工资:%d' % (self._name, self._sums, 1200 + self._sums * 0.05))


def main():
    m = Manager('关羽', 2)
    m.m_money()
    p = Programmer('刘备', 20)
    p.u_money()
    s = Sale('张飞', 8000)
    s.s_money()
    m1 = Manager('赵云', 5)
    m1.m_money()
    p2 = Programmer('曹操', 10000)
    p2.u_money()
    s1 = Sale('诸葛亮', 800000)
    s1.s_money()


if __name__ == '__main__':
    main()

slots 需要限定自定义类型的对象只能绑定某些属性,可以通过在勒种定义slot变量来进行限定,注意 slot只对当前类对象生效,对子类不起作用

类之间的关系

此处盗用老师图


image.png

image.png

类和对象

类是抽象的,对象是具体概念

单一原则

单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情
高类聚

开闭原则

对于代码拓展开发,随便你怎么取然后去脱站,但是要修改原来本身已经定义好的就关闭。当需求发生改变的时候,我们需要对代码进行修改,这个时候我们应该尽量去扩展原来的代码,而不是去修改原来的代码,因为这样可能会引起更多的问题。

里氏替换原则

用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为

合成聚合复用原则

合成/聚合复用原则经常又叫做合成复用原则。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,572评论 18 399
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,504评论 1 51
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,912评论 17 410
  • 中国玉文化源远流长,古人就有:“黄金有价玉无价”以及“传玉不传金”传统习惯。玉石不仅作为首饰同时也有着深厚的文化内...
    183f58b051d4阅读 250评论 0 0
  • 我不知道我何时会遇到你,我不知道我们会以何种方式相见,我不知道我们会不会永远的,在对方的人生里逗留,有无数的不知道...
    苏北_0638阅读 246评论 0 0