zoukankan      html  css  js  c++  java
  • python学习笔记(五)、抽象

    博客已迁移到CSDN《https://blog.csdn.net/qq_33375499

    不知不觉已经快毕业一年了,想想2018年过的可真舒适!!!社会就像一锅水,不同地方温度不同,2018年的我就身处温水中,没有一丝想要进取之心。

    1 抽象

      抽象在程序中可谓是神来之笔,辣么什么是抽象呢?抽象就是对一种事物或现象等,移除一些不相关的信息,只保留最终需要的信息。例如,一个篮球,说复杂点儿,它是由各种材料等组成,抽象就是不去管这些具体且不相关的信息,说简单点儿就是一个球,这样类似的球还有很多,比如乒乓球等(这样可以谈到继承,后面一张会详谈)。

    2 自定义函数

      函数就是对某个具体操作进行抽象化,并能够一次编写,多次使用,我们在使用中不再关心具体实现,只关心参数传递。

      在python中,要判断某个对象是否可调用,可以使用内置函数callable。函数也是一个对象。如:callable(function1)       ——> True        x = 1     callable(x)  ——> False

      辣么在python中怎么创建自定义函数呢?使用python提供的关键字 def 表示定义函数。如:

      def fun1(name):

        .......

    给函数编写文档

      一个良好的程序,不仅运行效率高,代码风格简洁等,最重要的是要有一个良好的文档解释,也就是一般我们所说的注释。注释就好比面试时候的一份简历,告诉面试官你是干什么的,能干什么等。

      要给函数编写文档,以确保其他人能够理解,可添加注释(以 # 打头的内容)。在python中,还有一种编写注释的方式,就是添加独立的字符串。比如在函数def 语句后面,添加独立字符串,如:

      def fun1(name):

        '打印出name'

        print("name : " + name)

      形如这样放在函数开头的字符串我们称为文档字符串(docstring),它将作为函数的一部分信息被存储起来。

      在python中,通过functionname.__doc__ 获取函数的文档字符串信息。__doc__ 是函数对象的一个属性。属性名中的双下划线表示这是一个特殊的属性。fun1.__doc__  ——> '打印出name'

      注意:在python中,所有的函数都有返回值return的。如果在代码中,函数并没有return什么,辣么它将返回None。

    4 参数

      很多我们自定义的函数都会给它附带一些参数,好根据这些参数进行相关处理。一般在def语句中,位于函数名称后面的变量统称为形参,而在调用函数时提供的参数值称为实参

      4.1 传值和传地址引用

      通常我们在参数传递是,分为值传递和地址引用传递。值传递:方法在调用执行过程中,将值传递给方法中对应的参数,在方法中对该值进行修改,并影响实际实参的值。引用传递:在方法调用执行过程中给对象参数传值后,方法中对该值的修改,实参的值也相应的修改了。辣么如果在实际开发过程中,遇到了那种实际传参是引用传递,而我们需要的又是值传递,怎么办呢?针对这样的需求,我们通常是给实参创建一个副本。如:names = ['name1','name2']       ns = names[:]

      4.2 关键字参数和默认值

      在前面使用的参数都属于位置参数。形参的值根据位置一一对应着实参传递进来的顺序。如:def fun1(name,age):   ........         调用时:fun1(name,age) 。在实际开发中,python还提供了关键字参数。关键字参数是根据参数名称进行传值调用执行的,这样有助于表名出各个参数的作用,并且,可以指定默认值。如:def fun1(name='xxx',age=0) 。在实际开发中,像这样指定了值得参数,调研函数时可以不提供这个参数,函数在执行过程中,会使用默认提供的那个值。如:

      def fun1(name='xxx',age=0,addr='地球'):

        print(f'name: {name}  age: {age}   addr: {addr}')

      fun1(age=23,name='张三')  ——> name:张三  age: 23  addr: 地球

      程序使用过程中,还可以结合位置参数与关键字参数,但必须先指定所有位置参数,否则解释器将不知道它们是那个参数,即不知道参数对应的位置,在开发中,这种方式使用的很少,大家了解一哈就行。

      4.3 收集参数

      有时候,允许用户提供任意数量的参数很有用。python提供了带星号( * )的参数,该参数将调用函数时多余的参数收集起来,组合成一个元祖(有点儿像前面提高的赋值:序列解包)。调用函数时,如果没有给带星号的参数提供值,该参将表示为一个空元祖 () ;带星号的参数通常放在其他形参的最后面,但是也可以放在其他位置,值得注意的是放在其他位置时,后面的参数需要使用名称来指定,也就是使用关键字参数。

      星号运算符( * )不会收集关键字参数。如果要手机关键字参数,可以使用两个星号( ** )。如def fun1(**params):print(params)    ——> {'param1':'value1','param2':'value2',.........} 。这样得到的是一个字典类型的变量。

      4.5 分配参数

      前面介绍了如何将参数收集到元祖或字典中,但用同样的两个运算符( * 和 ** )也可以执行相反的操作。如:

      def addXY(x,y):print(f'{x} + {y}', (x+y), sep=' = ')

      params = (2, 3)

      addXY(*params)  ——> 2 + 3 = 5

      如果在定义和调用函数时都使用 * 或 **,将只能传递 元祖 获取 字典 来调用。因此还不如不使用它们,直接传值调用。所有,一般而言,在实际开发中,只有在定义函数(允许可变数量的参数) 调用函数时(拆分字典或序列)使用 * 和 **。

    5 递归

      递归表示在函数内部又再次调用本身。如:

      def fun1():

        fun1()

      在实际中,有很多栗子可以用递归来实现,比如常见的阶乘、二分查找。小伙伴们不妨可以使用递归来编写一哈。

  • 相关阅读:
    第5章 css与背景相关的样式background
    第4章 css文字text与字体font-face
    第3章 css属性color的RGBA值
    第2章 css边框属性
    第1章 初识CSS3
    CSS单行、多行文本溢出显示省略号(……)解决方案
    Access-Control-Allow-Origin实现跨域访问 跨域
    Mysql主数据库+备份数据库部署教程
    PHP 数据安全问题总结
    PHP redis 批量操作
  • 原文地址:https://www.cnblogs.com/www-123456/p/10464777.html
Copyright © 2011-2022 走看看