欢迎回来,这里python学习的第十一篇笔记。在历往的推送中,我们已经或多或少的涉及到一些关于python函数的概念、用法。比如这一篇 ↓

手把手带你学 Python3(九)| 快速实现数据处理的不二工具

这段时间又系统的学习了一下函数,所以再来絮絮叨一下,以作补充。

上一篇阅读量 数月亮 好低换个颜色写开头

函数是什么

函数,即实现一个特定功能的代码段。是python中的重要技能(工具)。

函数离我们并不远,早期我们已熟练使用了一些内置函数:例如input print等;

根据使用范围可以将函数分为两类:

  • 主函数

    我们会使用这样来表示,它和代码一样,全局都是使用;

    01 if _name_ = '_main_':02     print('This is main.')
  • 子函数

    除了内置函数外,这里就是发挥你洪荒之力的地方啦;

    03 def Plus(a,b):04     print(a+b)

另外,还能从实现不同的功能角度来区分,比如 匿名函数 以及高阶函数 详见实例说明:

图片来源于 生信菜鸟团 python学习的第九篇

使用方法:

图片来源于cnblog:痴海

为什么要写函数

看似好像按格式写,实现简单目的的时候,代码不是会显得复杂?那么为什么要写函数呢

首先是好看,连宠物都开始美容的年代,一代码农怎么能忍自己的代码不好看呢(扯远了)那什么的代码是好看的?我认为规则有序,不一定方方正正,比如 Voronoi图(维诺图)

图片来源于 果子学生信:我一直以为奥林匹克水立方上面的格子是乱画的。

那 Python中的规则呢,官方建议PEP8 :

图片来源于 小码哥如何七天入门python3

我们可以通过 Pycharm 中我们已经说到如何快速使用规范代码的方法,如上述提示。修改以后,虚线提示消失,符合主流规则,由于现在的代码段数量较小,可能显示不来大改变,但是习惯还是一开始就训练的好。

规范了以后就会带来很多的好处,比如检查以及理解代码块,如果在定义函数前在注释一句话,那会对使用者更友好。

第二是代码容易拆分,拆分的好处处理看起来整齐以外,还能将代码提速,即调用需要的子函数实现功能。当然,在实现一个复杂功能的时候,代码块可以分工给不同的人员来开发,好比一亩三分田,提高协作效率。

第三是有序,避免代码重复(DRY),同时可以厘清思路,比如代码可以依据数据分析过程,从数据导入→数据清理→数据处理→数据可视化等逐一实现。同时也为易读、易改做铺垫。

DRY(Do not Repeat Yourself)原则,不要重复自己。

参数使用

在之前推送中我们简单提到过形参和实参,形参指形式参数,通过赋值才具有意义,可以理解为变量;而对应的实参就是具有实际意义的参数,可以是字符串、数字等。

注意形参可以预先给定一个默认值。如果调用不给实参,那么参数将使用默认值;如果给定值,那么默认的参数会被替换。

在定义函数的过程中,一定要注意的形参的位置信息,如果对调的话可能造成的情况就是输出错误结果甚至报错。当然,在调用过程中可以在函数中将参数直接定义,可以避免位置错误带来的麻烦。

例如我们举一个内置函数的例子map,这也在之前的推送中提到,主要用于对list中各元素的批量处理。

#将浮点数取整list_float = [1.1, 2.1, 3.5, 4.6, 5.2, 6.66, 7.877]list_int = list(map(int,list_float))    print(list_int)

#参数位置错位,就会报错list_float = [1.1, 2.1, 3.5, 4.6, 5.2, 6.66, 7.877]list_int = list(map(list_float,int))    print(list_int)

TypeError:'type' object is not iterable

我们可以使用关键字实参来躲避位置错位带来的问题:

#关键字实参01 def Plus(a,b):02     print(a+b)030405 Plus(b=2, a=1)

但是,如果项目中不确定需要传递几个实参,也就是无法确定需要多少个形参,我们就需要使用如下的办法来解决:

在定义函数过程中使用 * 来实现解释任意多个形参。

* 在这个过程中指代一个空元祖。

返回return

一个完整的函数的都会有 return,返还值可为基本数据类型,同时可以返还一个表达式,如果没有,返回 None

01 def Plus(a,b):02     add_sum = a+b03     return add_sum04     #return a+b

05 add_result = Plus(b=2, a=1)

补充资料:内置函数官方文档

http://docs.python.org/3/library/functions.html


猜你喜欢

三剑客 PyCharm使用  | 编程基础与规范代码 | 列表使用

元组拆包是个啥?| 字典与FASTA文件序列抽提

如何判断序列是否跨过剪切位点 | python3 脚本小实战

爬虫小测试 | 函数入门

如何优雅的数月饼

全国巡讲约你

第1-11站北上广深杭,西安,郑州, 吉林,武汉,成都,港珠澳(全部结束)

一年一度的生信技能树单细胞线下培训班(已结束)

全国巡讲第13站-杭州(生信技能树爆款入门课)(已结束)

中秋节一起来学习!全国巡讲第16站-广州(名额紧张)

如果你也有什么学函数好点子和建议,欢迎留言哟。

点击原文 即刻拥有内置函数官方文档

点个在看再走呗

为什么要在基类使用私有数据_为什么要使用函数相关推荐

  1. 基类使用私有数据_C++作业之多继承与虚基类

    点击蓝字 关注我们 实验目的 1.掌握多重继承的使用. 2.理解虚基类的作用. 3.熟悉派生类对象与基类的转换. 1 实验要求 1.将代码和运行结果复制到word文档提交. 2.word文档命名格式: ...

  2. 设计一个程序,求正方形和长方形的周长,具体要求如下: (1) 定义正方形类Square作为基类,包含数据成员边长,以及构造函数、求正方形周长的虚函数、输出函数。 (2) 定义类Square的共有派

    设计一个程序,求正方形和长方形的周长,具体要求如下: (1) 定义正方形类Square作为基类,包含数据成员边长,以及构造函数.求正方形周长的虚函数.输出函数. (2) 定义类Square的共有派生类 ...

  3. 析构函数声明无效_C++基类的析构函数为何要声明为虚函数

    C++的类中,构造函数用于初始化对象及相关操作,构造函数是不能声明为虚函数的,因为在执行构造函数前对象尚未完成创建,虚函数表还不存在. 析构函数用于销毁对象完成时相应资源的释放工作,析构函数可以被声明 ...

  4. C++中访问类的私有数据成员的第三种方法

    我们知道,C++的类是有封装性的,那么对于私有数据成员我们如果想在类外访问,一般而言无外乎这么两种方法: 1.通过公有的成员函数 2.通过友元 这是两种通常的做法,还有一种是比较"反常&qu ...

  5. C++访问类的私有数据成员的三种方法

    总是忘记C++的私有数据成员到底什么能访问,今天总结下,特此记录. 注:还可以使用指针访问修改private数据成员的值: class Test {private:int x;int y; publi ...

  6. Java基类共同属性设置_多选择基类的访问属性-Java初学笔记

    多选择基类的访问属性 你现在知道在定义类的访间属性时可用的选择项,你希望使用这些类定义子类.你知道在类继承上这些属性所具有的效果,但是你如何决定到底应该使用哪一个呢? 这里没有死板和现成的规则,你选择 ...

  7. python嵌套类(内部类相互调用)_核心解密Python函数在(类与函数之间)和(类与类之间)互相调用...

    image.png 一.类与函数之间 首先来看一个函数间的调用 类方法: #实现类中函数之间互相调用 #下面一个学生的简单自我介绍为例子 __metaclass__=type #自由的.动态的修改/增 ...

  8. 请编写一个正方体类,类的私有数据成员是边长,要求用公有成员函数实现以下功能:1. 由键盘分别输入正方体的边长2. 计算并输出正方体的体积

    #include <iostream> using namespace std; class aaa { private: int a; public: void Print() { co ...

  9. C++经验(四)-- 基类构造函数和析构函数中调用virtual虚函数?

    class Base {public:Base();virtual void oneFunction() = 0;... };Base::Base() {...oneFunction(); }clas ...

最新文章

  1. eclipse中maven打包
  2. Git历险记(四)——索引与提交的幕后故事
  3. 个人计算机与微型计算机的区别与联系,微处理器、微型计算机和微型计算机系统之间有何联系与区别?...
  4. 【转】UGUI研究院之缓存策略让UI打开更快(三十)
  5. idea连接mysql例子_IDEA连接MySQL数据库,并把数据库数据在浏览器中进行展示
  6. pytest框架_Python最火的第三方开源测试框架——pytest
  7. arduinowifi.send怎么获取响应_ChatterBot代码解读-获取对话
  8. java queue源码_Java高并发系列之ArrayBlockingQueue源码解析
  9. ubuntu 系统相关
  10. GCC: libgcc的用途以及交叉编译
  11. 【Elasticsearch】ES Elasticsearch查询优化
  12. [转]在EntityFramework6中执行SQL语句
  13. ExtAspNet v2.0.6发布 - AJAX性能提升
  14. 在VS2010中使用Git【图文】转
  15. html监控服务器状态,HTML5-WebSocket实现对服务器CPU实时监控
  16. EPS数据导入CASS中
  17. 解决三星PM981硬盘无法正常安装黑苹果的问题(第四版)
  18. 两万字详解自动驾驶开发工具链的现状与趋势
  19. html广告拦截网吧,网吧广告拦截软件是怎么安装的
  20. 使用微信开发工具制作一个简单的古诗词展示微信小程序

热门文章

  1. SAP Hybris Commerce Cloud 项目里的 eclipsebin 文件夹
  2. 关于 SAP 电商云 Spartacus UI checkout 流程的一些讨论
  3. windows 操作系统里 git bash 和 git cmd 的区别
  4. SAP Spartacus Ngrx 使用的一些准则
  5. 一个讨论:SAP项目实施的顾问,需要花时间去调试代码了解技术细节吗
  6. Angular元素属性绑定的一个例子
  7. SAP BSP, Java Web Project,Android和微信小程序的初始页面设置
  8. SAP Vim和ABAP Editor的个人设置
  9. SAP Business Application Studio和Authentication Trust Management
  10. SAP UI5 application - model propagation