不知不觉已经快毕业一年了,想想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. excel写入操作

    字典列表类型数据写入excel. #导入xlwt库 import xlwt import os # 步骤1:获取excel文件的绝对路径 dirPath = os.path.join(os.getcw ...

  2. libguestfs手册(1): 架构

    要编辑一个image,则运行下面的命令 guestfish -a ubuntutest.img ><fs> 会弹出一个命令行工具 运行run ><fs> run 我 ...

  3. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  4. Spring Cloud 微服务架构的五脏六腑,统统晒一晒!

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  5. [Swift]LeetCode143. 重排链表 | Reorder List

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You may not mod ...

  6. [Swift]LeetCode654. 最大二叉树 | Maximum Binary Tree

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...

  7. 7.Git分支-分支简介、分支创建、分支切换

    1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...

  8. 前端基本知识(三):JS的闭包理解(第一个思考题有错误,已修改)

    JS闭包的理解 一.变量的作用域 二.如何从外部读取局部变量 三.什么是闭包 四.深入理解闭包 五.闭包的用途 六.使用闭包注意情况 七.JavaScript的垃圾回收机制 八.一些思考题 一.变量作 ...

  9. asp.net core 系列 19 EFCore介绍

    一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2.EF Core 的计划与 .NET Core以及 ASP.NET Core 版本同步.EF Core 是一个 .NE ...

  10. PHP中Smarty引擎的常用语法

    PHP中Smarty引擎的常用语法 输出今天的日期: {$smarty.now|date_format:"%H:%M %A, %B %e, %Y"} 实际上用到了PHP的time( ...