python的函数(一):基本概念

我们之前学了一些基础的过程语句,如if else、while、for。随着我们python程序的功能越来越复杂,代码也就越来越长,因此我们就需要用“函数”来简化代码。我们通常把功能单一的、可重复利用的代码写成函数。函数的优点就是定义一次,可多次调用,提高的代码的可复用性、可阅读性、可维护性。

函数的定义

函数的定义用def关键字,一般格式如下:

defname(arg1,arg2, ...argN):

statement

returnvalue

注:

def创建了一个函数对象,把函数名字name指向这个函数对象。

参数是可选的,可以没有参数,也可以有任意多个参数。参数的类型是任意的,可以是数字、字符串、列表,甚至是对象。

参数传递时是对象引用的方法,就是说传递的是指针。当函数内部修改输入参数时,外部的参数就真的被修改了。

return可以返回一个值,也可以仅仅是return,不带value,甚至还可以没有return。当后两种情况时,函数会默认返回None。

return语句可以出现在函数主体的任意位置,一旦遇到return语句,函数就执行结束了。

函数也是对象?

与C++、Perl等语言不同,python里的函数本身也是可执行代码(不是函数声明或者预定义)。python解释器看到def时,先创建一个函数对象,然后把函数名字指向刚创建的函数对象。因此,函数与数字、字符串、列表等一样,也是一种数据类型。

函数定义在运行时(Runtime)执行?

我们来理解python的函数与C++、Perl等语言的另一个区别。上面讲到python解释器遇到def就立即创建对象,所以说python没有预先定义的说法,也就没有compile的说法。因此,python的函数定义可以出现在任意的地方,例如下面的例子也是合法的:

deffunc_a():#创建对象func_a

a=1

deffunc_b():#在func_a里面又创建了对象func_b

b=2

又如:

deffunc():

print("great than")

else:

deffunc():

print("less than")

func()#此处调用的函数是动态的

参数类型是可变的?

我们来看一个例子:

deftimes(x,y):

returnx*y

times(2,4)# = 8

times(3.14,2)# = 6.28

times("-",20)# = "--------------------"

l= [1,2]

times(l,4)#[1, 2, 1, 2, 1, 2, 1, 2]

从这个例子是不是感觉python到与Perl有不一样的地方。参数类型由实际传递的对象类型决定。在python里,对象类型不同,操作符*乘号就做不同的事情。这其实就是操作符的重载(C++里也是这样叫),实现了多态。

总结

到这里,我们把函数基础概念就讲完了。是不是学得特别累,python的函数竟有这么多不同之处。(我们既然学python,就必须一步一个脚印打好基础!)

我们总结一下要点:

函数也是对象。

函数定义是动态执行的,没有编译的过程,所以使用之前必须先定义。

函数定义可以出现在任意地方,甚至在另一个函数内部。

函数的参数是对象引用,是指针传递。

函数的参数类型由传入的对象决定,利用操作符重载,实现了多态。

预告

下一次,我们学习函数的作用域。

本文来自企鹅号 - ExASIC媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员八阿哥

年薪20万Python工程师进阶(4):一文读懂Python可迭代对象、迭代器和生成器

序列可以迭代的原因:iter 函数。解释器需要迭代对象 x 时,会自动调用 iter(x)。内置的 iter 函数有以下作用:

11430
来自专栏吴裕超

总结一下js的原型和原型链

最近学习了js的面向对象编程,原型和原型链这块是个难点,理解的不是很透彻,这里搜集了一些这方面的资料,以备复习所用 一. 原型与构造函数   Js所有的函数都有...

37350
来自专栏C语言及其他语言

【编程经验】关于数组指针与指针数组的解释

啦啦啦啦,小编又来了呢,今天给大家讲讲数组指针与指针数组,依旧废话不多说,直接步入正题。 关于数组指针和 指针数组,相信狠很多同学对此疑惑过,今...

29150
来自专栏程序员互动联盟

【专业技术】关于JS的prototype

概述: 在接触JS的过程中,随着理解的深入会逐渐的理解一些比较深奥的理论或者知识,那么今天我们来介绍一下比较难理解的prototype和constructor。...

34860
来自专栏Golang语言社区

【Go 语言社区】Go语言数组

Go编程语言提供称为数组的数据结构,其可存储相同类型的元素的一个固定大小的连续集合。数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合。...

366150
来自专栏ACM算法日常

leetcode 41| 缺失的第一个正数

难点分析:是不是和笔者一样,刚看完一遍题目都不知道它在问什么~经过多次揣摩之后,笔者终于懂了这道题目到底在问什么。其实它就是给定一个数组,然后看看数组中是否包含...

22020
来自专栏码云1024

c++ 深入理解虚函数

60860
来自专栏androidBlog

二分查找的相关算法题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

16310
来自专栏玄魂工作室

Python学习:类和实例

-----------------------------------------------------

17530
来自专栏小樱的经验随笔

【Java学习笔记之十六】浅谈Java中的继承与多态

1、  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。 特点:在继承关...

27170

扫码关注云+社区

领取腾讯云代金券