不知不觉已经快毕业一年了,想想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()

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

python学习笔记(五)、抽象的更多相关文章

  1. python学习笔记3_抽象

    这一步的学习四个知识点,如何将语句组织成函数,参数,作用域(scope),和递归 一.函数 1.抽象和结构 抽象可以节省很多的工作量,实际上它的作用更大,它是使得计算机程序让人读懂的关键(这也是最基本 ...

  2. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

  3. python学习笔记五 模块上(基础篇)

    模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  4. Python学习笔记五

    一. 递归 递归函数: def a (): print ("from b") b() def b(): print("from a ") a() a() 递推和 ...

  5. Python学习笔记五:错误与异常

    一:常见异常与错误 BaseException 所有异常的基类SystemExit 解释器请求退出KeyboardInterrupt 用户中断执行(通常是输入^C)Exception 常规错误的基类S ...

  6. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  7. Python学习笔记五(读取提取写入文件)

    #Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本,与大家共同学习. import os import re def get_filelist(dir ...

  8. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  9. python学习笔记五--文件

    任何情况下文本文件在Python里均是字符串模式. 一.创建一个文件,并写入: 函数open(文件名,w) 二.打开一个文件,并读取: 函数open(文件名,r),“r”是默认值,可以不用写 三.使用 ...

随机推荐

  1. 一、开水白菜(steamed Chinese cabbage in supreme soup)

    菜品历史 相传,开水白菜是由颇受慈禧赏识的川菜名厨黄敬临在清宫御膳房创制的. 黄敬临当厨时,不少人贬损川菜"只会麻辣,粗俗土气",为了破谣立证,他冥思苦想多时并经由百番尝试,终于开 ...

  2. LeetCode编程训练 - 折半查找(Binary Search)

    Binary Search基础 应用于已排序的数据查找其中特定值,是折半查找最常的应用场景.相比线性查找(Linear Search),其时间复杂度减少到O(lgn).算法基本框架如下: //704. ...

  3. 微信小程序 + mock.js 实现后台模拟及调试

    一.创建小程序项目 mock.js 从 https://github.com/nuysoft/Mock/blob/refactoring/dist/mock.js 下载 api.js:配置模拟数据和后 ...

  4. 【安富莱原创开源应用第3期】花式玩转网络摄像头之VNC远程桌面版本,稳定运行2年不死机

    说明: 1.前段时间开源了一个网络摄像头的TCP版本 https://www.cnblogs.com/armfly/p/9173167.html,这次再来一个远程VNC的版本.使用更方便,无需大家制作 ...

  5. app性能测试,你需要关注哪些指标?

    app性能测试,你需要关注哪些指标? 一.Android客户端性能测试常见指标: 1.内存 2.CPU 3.流量 4.电量 5.启动速度 6.滑动速度.界面切换速度 7.与服务器交互的网络速度 二.预 ...

  6. [Swift]LeetCode519. 随机翻转矩阵 | Random Flip Matrix

    You are given the number of rows n_rows and number of columns n_cols of a 2D binary matrix where all ...

  7. 如何为自己的pip包打造可以执行的系统命令

    1.我们在打包我们自己的Python Package的时候.我们不仅可以在代码中使用我们的package,而且可以添加一些可执行命令来执行自己的函数. 2 .我们应该怎么办呢? 1.首先新建目录以及文 ...

  8. Java IO 导入导出TXT文件

    字节流和字符流 区别: 读写单位:顾名思义,字节流以字节(byte)为读写单位,而字符流以字符为读写单位,根据码表映射字符,一次可能读入多个字符. 处理对象:字节流可以处理所有类型的数据(包括图片等) ...

  9. linux的tomcat服务器上部署项目的方法

    在tomcat服务器上部署项目的前提,是我们已经准备好了tomcat服务器.在CentOs环境下部署JavaWeb环境,部署tomcat服务器在前面的文章中已经总结过了,可以参考以前文章. 一  to ...

  10. 【Spark篇】---Spark中Transformations转换算子

    一.前述 Spark中默认有两大类算子,Transformation(转换算子),懒执行.action算子,立即执行,有一个action算子 ,就有一个job. 通俗些来说由RDD变成RDD就是Tra ...