Python——函数

经过对python的学习,相信我们已经掌握简单的python的知识,接下来让我们更进一步来学习python中的函数。

什么是函数:


        首先我们先了解什么是函数。其实编程中的函数和我们数学中的函数不是一个东西。通俗讲,编程中函数的定义是:我们通常在进行一些功能处理的过程中,需要一行或者多行代码来完成某个业务功能和流程处理的代码集合,叫做函数。如:

​
# 计算一个由用户输入半径的圆的面积
#顶一个变量 PI,表示圆周率
PI = 3.14;
# 使用 input 函数接受一个用户输入的半径值,但是 input 接受的值是字符串
# 所以需要我们使用 int()函数来完成转换
# int() 函数会将传递的参数尝试着转换为整形数字
r = int(input("请输入圆的半径:"));
area = PI * r * r;
print("半径为%d 的圆的面积是"%r+str(area));
print("半径为"+str(r)+"的圆的面积是"+str(area));

​

    上面这段程序相信大家都能看懂,就是求取用户输入一个指定半径的圆的面积。
    假如我们在平常打代码中遇到相同重复的代码时,我们应该怎么去做?此时,应该尽量的避免代码的重复,哪怕是一行相同的代码。因为python 和其他编程语言一样,可以将这段程序封装成函数,通过一个定义的函数封装好这些代码,在某些需要的时候,通过函数的名称直接调用即可。

函数的定义:

        函数的定义非常简单,python 中通过 def 关键字来定义函数
def 函数名称(参数列表):
 函数中封装的代码块
 [return 返回值]
按照上面的例子,我们定义一个求取圆的面积的函数:
# 使用 def 函数名称(参数列表): 来定义一个函数
# 我们定义了一个获取已知半径圆的面积的函数
# 将来我们要用的时候,只要传递过来半径就行了
# 这个函数会辅助我们完成计算面积的功能
def getCircleArea(r):
PI = 3.141592653;
return PI * (r**2); ## 使用 return 关键字返回调用者想要的结果
如上所示,一个计算圆的面积的函数就被定义好了,函数的名称为 getCircleArea 。切记,
定义的函数不会自动执行函数中的代码的,需要使用者调用才能执行。
函数的调用:
        
        定义好的函数,我们需要通过函数的名称来调用函数,函数中的代码才会执行。调用函
数通过 函数名称 ( 参数列表 ) 来调用函数,后面的圆括号中,可以根据定义函数的参数列表给
函数传递对应的参数
# 通过使用函数名称(参数列表) 来调用一个已经定于的函数
# 如果有返回值,则使用变量接受返回值,如果没有,则直接调用就行了
res = getCircleArea(5);
print("半径为 5 的圆的面积是:%f"%res);
print("半径为 5 的圆的面积是:"+str(res));
这样,我们就可以在需要的时候,直接通过定义好的函数名称 getCircleArea(radius) 来进
行函数功能的重复执行就可以了。
函数的变量:
        在函数中,我们可以看到也进行了变量的使用,那函数中的变量和函数外的变量到底有
什么区别呢?我们可以一起来了解:
        
        全局变量:
        声明在函数外面的变量,可以在文档的任意地方使用这个变量,我们称为全局变量
关于全局变量,使用方式如下:
# 定义在函数外面的变量,叫做全局变量,全局变量可以在任何地方使用
name = "旺财";
# 直接使用全局变量
print(name);
def printInfos():
# 在函数中使用全局变量
print(name);
printInfos();

        局部变量:

        局部变量就是声明在函数内部的变量,只能在函数内部使用,函数执行结束这个变量就 会被回收,我们称之为局部变量。局部变量只是在函数中可以使用,出了函数这个变量就不认识了(垃圾回收机制回收了内存)。

def test():
name = "旺财";
print(name); 
test(); 
# 报错,错误信息室 name 没有定义,==> NameError: name 'name' is not defined
# 因为此时我们定义 name 变量在函数中,name 是一个局部变量,作用域是函数内部
# 只在 test 函数中生效,函数外面是没有这个变量的
print(name);

        通常情况下,函数内部声明赋值的变量和函数的参数都会当成局部变量进行处理。

        全局变量和局部变量:
        几乎所有的编程语言中都有全局变量和局部变量的区分,同时我们在开发过程中,也需
要尽量避免频繁使用全局变量 。原因是:
一:全局变量一经使用就常驻内存,如果全局变量中数据过于庞大就会导致 内存溢出 (内存不够用了)而程序崩溃的情况。
二:全局变量在使用的过程中容易造成变量的 全局污染 ,因为在项目开发过程中 通常是多个人协同开发多个 Python 文件,当相互引用的时候,就有可能会因为全局变量重 名而造成变量的值覆盖的情况出现。
函数的参数:
        
        上面我们在函数的定义和调用时,我们发现,在函数中,不管是定义函数还是调用 函数,都存在着一个() ,我们上面说这里面是参数列表,如刚刚我们写的圆的半径,但是没有详细的讲过,下面我们就函数的参数来看看。
        函数的形式参数和实际参数
        函数的参数主要会涉及到两个概念:形式参数(简称为 形参 )、实际参数(简称为 实参 )。
    ➢ 形式参数:
        其实就是定义函数时,函数括号中的变量,形式参数的意义是当前函数如果要被调 用执行,就必须让函数接收括号中定好的参数才能正常执行,就是形式上需要这些数据
才能执行函数,所以称为形式参数。
   ➢ 实际参数:
        实际参数是我们在通过函数名称调用函数时,在括号中传递的真实数据;实际传递给函数用于执行的数据,称为实际参数。
        函数的参数定义规则:
       函数通过 def 进行定义,用于执行一个功能,一个函数,可能需要参数,也可能不需要参数。
类似我们现实生活,执行一个功能就是做一件事情,做这件事情需要的资源就是参数,去做一件事情,有些需要资源,有些是不需要资源的。所以我们在对函数进行定义时需要遵守这几个规则:
规则 1:如果我们的程序中出现了一部分功能代码重复执行,就需要封装一个函数来减少 代码的重
             复量
规则 2:根据代码执行是否需要其他额外的数据,需要额外的几个数据就定义几个参数, 不需要
              额外的数据就不定义参数
规则 3 :实际参数可以传递任意对象【类型】 (python 中一切皆对象 )
        函数参数默认值:
        
        某些时候,我们可以给函数的参数定义默认值,这样函数在调用过程中,如果某些参数没有传递,就直接使用默认值来执行函数代码,函数默认参数确定比较简单,直接在形式参数上赋值就可以。
def getCircle(r = 5, PI = 3.141592653):
a = PI * r**2;
return a;
# 没有传递参数,则默认返回半径为 5 的圆的面积
print("圆的面积是:"+str(getCircle()));
# 传递了参数,则计算传递半径的面积
print("圆的面积是:"+str(getCircle(10)));
注意: 一旦要使用默认值,则所有的形参都必须有默认值。
函数的可变参数:
        在某些情况下, 函数的参数个数不是确定的,这样在常规定义函数时就木有办法进行形式参数的定义了。
        python 提供了一种可变参数,可以完美的解决这个问题。
        可变参数,是在形式参数前面加一个* 符号作为标识。
# 定义一个函数,遍历输出传递的数据
# 在参数前面加* ,表示这个数据的长度不定,任意长度
def printInfos(*infos):
for i in infos:
# print 函数,可以传递第二个参数,如果想不换行显示,
# 则可以添加第二个参数为 end=""
#print(i,end=""); 
print(i)
# 调用的时候传递几个,则显示几个
printInfos("张三","李四","王五");
printInfos("张三","李四","王五","唐六")
注意: 在某些特殊情况下,函数的可变参数放在了固定参数的前面;此时函数的调用就需要通过变量名称指定数据了。
特殊的用法:关键字参数:
        将传递给函数的参数,解析成 dict 字典 的形式,也就是 key:value 键值对的形式,这就是关键字参数的意义,更加方便可变参数的操作。
关键字参数,使用两个 ** 符号来声明关键字参数:
如:
def printInfos(**infos):
print(infos);
printInfos(id=123,name="小明",age=16,sex="男"

#运行结果:{'id': 123, 'name': '小明', 'age': 16, 'sex': '男'}
注意: 关键字参数,还可以指定只能传递什么样的名称为参数名称,就是命名关键字参数。命名关键字参数通过*符号作为分隔符号,符号后面的参数就是命名关键字参数。
# 参数列表中存在星号(*)参数,则表示星号之后的参数都是命名参数
def printInfos(id,name,*,age,sex):
print(id,name,age,sex);
# 报错,因为在定义函数的时候,存在*号参数,表示从*号后面的参数,
# 都是命名参数
printInfos(12,"大明",18,"男");
#正确
printInfos(12,"大明",age=18,sex="男");
另外一种情况,就是在可变参数的后面,添加的参数都是命名关键字参数,这里的命名。
def printInfos(id,name,*args,sex,age):
print(id,name);
print(args);
print(id,name,args,sex,age);
# 报错,因为 sex 和 age 都没法传递,会被当成 args 中的值
#printInfos(12,"李华","值 1","值 2","值 3",19,"男");
# 正确,就是在参数中存在了可变参数后,之后的必须使用命名参数
printInfos(12,"李华","值 1","值 2","值 3",age=19,sex="男");
扩展:函数中的参数,根据传递的参数的顺序、参数类型的不同,会有各种不同的组合 方式,如传递[字符串、字符串 ] [ 字符串、字符串 ...] [ 字符串、数值 ..] [ 数值、函数 ...] 等 等各种各样的情况,但是我们有了可变参数*args 和命名关键字参数 **kw 之流的出现,让函 数参数的接收变得比较简单。
我们可以通过 (*args, **kw) 的形式来接收任何形式的参数。
函数的返回值:
        返回值的意义:
        函数是执行一段代码完成一定的功能处理过程,函数中代码块执行的结果,如果我们后 面的代码中需要用到,就需要函数返回我们执行的结果,就是需要返回值;如果我们的函数 就是执行的代码,执行的结果我们后面的代码不适用,就不需要定义返回值。 如某 A 让某 B 做一件事,就是调用了某 B 的函数,如果这件事是取快递,某 B 做完取 快递这件事情,最后要将执行的结果[ 快递 ] 返回给某 A ,就是函数需要返回值;如果这件事 是下班锁门,某 B 做完这件事情就可以了,事情的结果不需要给某 A 进行汇报,就是函数 不需要返回值。
操作函数的返回值:
函数的返回值我们通过 return 关键字来返回。
返回值的语法结构如下:
def 函数名称(参数列表):
//函数代码
return 返回值;
注意:
返回值可以是任意对象 (python 中一切皆对象 )
返回值,需要在调用函数的时候进行接收,否则返回值没有意义的。
def getCircleArea(r):
PI = 3.141592653;
s = PI * (r**2);
return s; # return 关键字返回调用者需要的值
# 如果调用函数存在返回值,我们需要使用变量来接受,如下面
# 使用 res 变量接受了函数 getCircleArea 的值
res = getCircleArea(5);
注意: python 中的函数,不论是否写了 return 关键字,都会有返回值的存在,return 是
开发人员确定的返回值,如果没有 return 关键字 python 函数会返回一个 None 对象。
# Python 的函数都是存在返回值的,如果我们使用 return 指定返回值,
# 则返回我们指定的值
# 如果我们没有使用 return 来指定返回的值,则默认返回一个 None 对象,
# 表示返回的为空
def printMsg(msg):
print(msg);
res = printMsg("Hello Python~~");
print(res)

函数可以返回多个数据:

        python 的函数比较特殊,在函数执行完成后,通过 return 关键字可以同时返回多个数
,调用函数的时候 根据返回值的顺序来接收对应的返回值
# 定义一个函数,返回传递参数 10 倍数和 20 倍数
def test(val):
a = val * 10;
b = val * 20;
return a,b;
# 注意,接受的值的顺序和返回值的顺序一致
res1,res2 = test(10);
print(res1,res2);

以上就是关于python函数的简单介绍,希望能对大家有帮助,如有不足,希望大家能给予宝贵意见,如有侵权,请联系!
基于Python的计算思维训练主要涉及到函数的概念。函数Python中的基本编程结构,通过函数可以将一系列操作封装起来,提高代码的复用性和可维护性。 首先,函数的定义和调用是计算思维中重要的一部分。学习者需要理解如何使用def关键字定义函数,并且学会传入参数和返回数值。这能够帮助他们将复杂的问题拆分成更小的部分,然后再分别解决。 其次,函数的参数和返回值的运用是培养计算思维的有效途径。学习者需要理解函数的参数可以是任意类型的数据,也可以是默认值,还可以是可变数量的参数。同时,他们需要掌握函数可以返回单个数值、多个数值或者其他函数的能力。 此外,函数的嵌套和递归是培养计算思维的重要方法。学习者需要了解函数可以在其内部调用其他函数,从而实现更复杂的功能。而递归则可以帮助他们理解问题的分治和循环求解策略。 最后,函数的高阶用法和闭包也是培养计算思维的关键。学习者需要明白函数可以作为参数传递给其他函数,也可以作为返回值被另一个函数使用。此外,他们还需要掌握闭包的概念和运用,以便更好地理解函数的作用域和生命周期。 通过学习和实践以上内容,学习者不仅可以掌握Python函数的用法,还可以培养出较强的计算思维能力,从而更好地应对复杂的问题和挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值