我的编程空间,编程开发者的网络收藏夹
学习永远不晚

#12 Python函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

#12 Python函数

前言

矩形的面积 S = ab,只要知道任一矩形的的长和宽,就可以带入上式求得面积。这样有什么好处呢?一个公式,适用于全部矩形,一个公式,重复利用,减少了大脑的记忆负担。像这类用变量代替不变量的思想在数学中称为函数,Python中,也有类似的思想!

一、什么是函数

在数学中,函数是指输入集合与输出集合存在一种特定的映射关系,这种映射关系可以被广泛使用。在Python中,函数是指将一定量的代码块使用一个指定的函数名通过特有的语法封装起来的代码块。

函数优点:

    • 大大减少重复代码

    • 可以重复使用

    • 程序具有扩展性

程序代码结构性提高

二、函数初始化

现在是不是觉得函数特?,来一起看看如何定义一个函数吧:

In [1]: def func():         # func是函数名,可随意更改
   ...:     print('A')      # 函数的内容
   ...:     print('B')
   ...:     print('C')

看完上面定义方法,其实可以发现其定义语法规则:

  • 函数初始化以关键字 def 开头,之后接函数名和一对圆括号,再加一个冒号

  •  函数的内容使用缩进

但是,这并不是一个标准的函数写法,标准的函数应当还有一个非常重要的部分,那就是函数的说明,放在函数名的下面,用三引号引起来,例如:

In [2]: def func():
   ...:     '''
   ...:     function's description      # 三引号将函数的说明引起来
   ...:     '''
   ...:     pass

三、函数返回与调用

函数的返回:

函数是可以将结果返回的,如果想要获取函数的执行结果,可以使用关键字 return 将其返回,例如:

In [3]: def add():
   ...:     '''
   ...:     calculate a plus b
   ...:     '''
   ...:     a = 5
   ...:     b = 6
   ...:     c = a + b
   ...:     return c              # 将结果c返回

函数在执行过程中一旦执行到return语句,就会结束函数,并返回

函数中如果没有return语句,则默认执行完毕后返回 None

函数的调用:

一个函数定义完成后,必须要又相应的调用语句才能够执行,否则就和没写一样━━( ̄ー ̄*|||━━,调用方法如下:

In [4]: def tell_name():
   ...:     '''
   ...:     print your name
   ...:     '''
   ...:     print('I am MinuteSheep')

In [5]: tell_name()       # 调用函数
I am MinuteSheep

函数的递归:在函数内部返回调用自己

大家一定做过这种类型的题目:

 

解题步骤:f(20)=f(10)=f(5)= 5 + 3 = 8,可以看到,当x>=10时,就是自己调用自己,这就是递归,Python代码可以这样写:

In [20]: def func(x):
    ...:     if x < 10:
    ...:         ans = x + 3
    ...:         print(ans)
    ...:         return ans
    ...:     else:
    ...:         return func(x/2)    # 递归调用自己
    ...:

In [21]: func(20)
8.0
Out[21]: 8.0

 函数递归的规则:

  • 必须有一个明确的结束条件

  • 每次进入递归后,运算规模比上一次小(否则无限大,问题无法求解,内存会被占满)

四、函数参数

在初始化函数时,可以令函数使用参数,如下:

In [6]: def add(x,y):       # 函数拥有参数时,将其写在括号里即可
   ...:     '''
   ...:     calculate x plus y
   ...:     '''
   ...:     return x + y    # return语句可以返回计算式

  In [7]: add(1,5)            # 带参数的调用方法
  Out[7]: 6

形参:只是一个名字,不占用真实内存空间

In [6]: def add(x,y):      # x,y就是形参,只是一个名称而已,并不占用内存空间
   ...:     '''
   ...:     calculate x plus y
   ...:     '''
   ...:     return x + y

实参:本质是一个变量,占用真实内存空间

In [7]: add(1,5)           # 1,5是实参,本质为 在调用函数时,将 x=1,y=5传给add函数,相当于两变量,占用内存资源
Out[7]: 6

按位置参数调用:按形参的位置调用

  In [8]: def print_num(a,b,c):
  ...: '''
  ...: print num of nums
  ...: '''
  ...: print(a)
  ...: print(b)
  ...: print(c)

  In [9]: print_num(1,3,5)

  1
  3
  5

# 可以看到1和a对应,3和b对应,5和c对应,这就是按位置参数调用

按关键参数调用:调用函数时,直接参数赋值,而不按位置赋值

In [8]: def print_num(a,b,c):
   ...:     '''
   ...:     print num of nums
   ...:     '''
   ...:     print(a)
   ...:     print(b)
   ...:     print(c)
   ...:

In [11]: print_num(b=7,a=1,c=10)
1
7
10

# 直接给变量赋值,必须指定是哪个参数

注意:在调用时,位置参数可以和关键参数混合使用,但是位置参数一定在关键参数之前才行:

In [8]: def print_num(a,b,c):
   ...:     '''
   ...:     print num of nums
   ...:     '''
   ...:     print(a)
   ...:     print(b)
   ...:     print(c)
   ...:

In [12]: print_num(5,c=1,b=10)    # 混合使用方法
5
10
1

In [13]: print_num(a=4,6,c=10)   # 混合使用时,位置参数必须要在关键参数之前,否则报错
  File "<ipython-input-13-99c9e145d0a7>", line 1
    print_num(a=4,6,c=10)
                 ^
SyntaxError: positional argument follows keyword argument

默认参数:在初始化函数时,可以给形参指定默认值,例如:

In [14]: def print_num(a,b,c=5):   # 指定c的默认值为5
    ...:     print(a)
    ...:     print(b)
    ...:     print(c)

在调用时,如果不需要改变c的值就可以省略不写,如果需要改变其值,调用时重新赋值即可:

In [15]: print_num(1,2)       # 使用默认参数
1
2
5

In [17]: print_num(1,2,3)     # 按位置参数,令c=3
1
2
3

In [19]: print_num(1,2,c=3)   # 按关键参数,令c=3
1
2
3

非固定参数:有时函数在初始化时不确定要传入参数的数量,这时就要使用非固定参数了

In [22]: def print_num(a,b,c):
    ...:     print(a,b,c)
    ...:

In [23]: print_num(1,2,3,4)   # 当参入的参数多于给定的参数时,会抛出异常
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-23-a8e0af192084> in <module>
----> 1 print_num(1,2,3,4)

TypeError: print_num() takes 3 positional arguments but 4 were given

*args:将传入的多余参数构造成一个元组

In [26]: def print_num(a,b,c,*args):
    ...:     print(a,b,c)
    ...:     print(args)
    ...:

In [27]: print_num(1,2,3,4,5,6,7,8,9,0)    # 多余的参数变成元组保存下来
1 2 3
(4, 5, 6, 7, 8, 9, 0)

**kwargs:将传入的多余参数构造成一个字典

In [28]: def print_num(a,b,c,**kwargs):
    ...:     print(a,b,c)
    ...:     print(kwargs)
    ...:

In [29]: print_num(1,2,3,f=3,g=45,y=123)     # 将多余的参数构造成字典保存下来
1 2 3
{'g': 45, 'y': 123, 'f': 3}

最完美的办法:*args和**args一起使用

In [30]: def print_num(a,b,c,*args,**kwargs):
    ...:     print(a,b,c)
    ...:     print(args)
    ...:     print(kwargs)
    ...:

In [32]: print_num(1,2,3,4,4,5,f=45,g=23,u=345)
1 2 3
(4, 4, 5)
{'g': 23, 'u': 345, 'f': 45}

五、函数变量

在Python中,有两种变量:全局变量和局部变量

全局变量:在整个程序中都可以访问的变量,分配在全局数据段,在程序开始运行的时候被加载,生存周期从程序开始到程序结束,也就是说,全局变量被定义在主程序中

局部变量:存在于某个函数或类中,只有在函数或类中才能够被访问,只分配在程序的堆栈中,生存周期从函数开始到函数结束,也就是说,局部变量被定义在子模块中

 1 quan_jv_bian_liang = 555
 2 
 3 
 4 def func():
 5     jv_bu_bian_liang = 666
 6     ans = quan_jv_bian_liang + jv_bu_bian_liang
 7     print(ans)
 8 
 9 
10 print(quan_jv_bian_liang)   # 访问全局变量
11 
12 print(jv_bu_bian_liang)     # 访问局部变量

上面程序的运行结果:

E:\PythonProjects\跟着MS学Python>python -u "e:\PythonProjects\跟着MS学Python\#12\1.py"
555                                  # 全局变量能正确访问
Traceback (most recent call last):   # 局部变量不能够访问
  File "e:\PythonProjects\跟着MS学Python\#12\1.py", line 12, in <module>
    print(jv_bu_bian_liang)
NameError: name 'jv_bu_bian_liang' is not defined

继续修改程序,验证全局变量是否可以在函数中被访问:

quan_jv_bian_liang = 555


def func():
    jv_bu_bian_liang = 666
    ans = quan_jv_bian_liang + jv_bu_bian_liang
    print(ans)


func()


# 运行结果
E:\PythonProjects\跟着MS学Python>python -u "e:\PythonProjects\跟着MS学Python\#12\1.py"
1221
# 可以看到全局变量在函数中可以被正确访问

继续修改程序,验证全局变量是否可以在函数内被修改:

quan_jv_bian_liang = 555


def func():
    jv_bu_bian_liang = 666
    quan_jv_bian_liang = 777    # 修改全局变量的值
    ans = quan_jv_bian_liang + jv_bu_bian_liang
    print(ans)


func()
print(quan_jv_bian_liang)

# 运行结果
E:\PythonProjects\跟着MS学Python>python -u "e:\PythonProjects\跟着MS学Python\#12\1.py"
1443   # 在函数内,全局变量被修改
555    # 在主程序中,全局变量并没有被修改

可以看到在函数内并不能真正的修改全局变量,如果非要在函数内修改全局变量,也不是不可以:

quan_jv_bian_liang = 555


def func():
    jv_bu_bian_liang = 666
    global quan_jv_bian_liang   # 申明这是全局变量即可
    quan_jv_bian_liang = 777
    ans = quan_jv_bian_liang + jv_bu_bian_liang
    print(ans)


func()
print(quan_jv_bian_liang)

# 运行结果
E:\PythonProjects\跟着MS学Python>python -u "e:\PythonProjects\跟着MS学Python\#12\1.py"
1443
777     # 被正确更改
# 尽量不要在函数内更改全部变量,这样做可能会导致变量使用混乱,让自己使用变量出错

六、高阶函数

当函数的参数是函数时,这个函数被称为高阶函数=====( ̄▽ ̄*)b

In [33]: def dunc(x):
    ...:     return x*x
    ...:

In [36]: def add(a,b,f):        # 将函数作为参数
    ...:     print(f(a) + f(b))

In [37]: add(1,2,dunc)
5

七、匿名函数

针对简单功能的函数,可以不显式的指定函数框架,使用匿名函数即简洁,又可以实现其功能:

In [38]: def func(x):
    ...:     return x*x

# 上面的函数使用下面的匿名函数代替:

In [39]: func = lambda x:x*x

In [40]: func(10)
Out[40]: 100

可以看到匿名函数的定义语法:函数名 = lambda 变量 : 函数体

八、内置函数

在Python中,有许多内置函数可以直接供我们使用,之前的讲解其实已经接触很多了,现在来看看全部的内置函数:

具体的使用方法见官方文档:https://docs.python.org/3.5/library/functions.html

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

#12 Python函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

#12 Python函数

前言矩形的面积 S = ab,只要知道任一矩形的的长和宽,就可以带入上式求得面积。这样有什么好处呢?一个公式,适用于全部矩形,一个公式,重复利用,减少了大脑的记忆负担。像这类用变量代替不变量的思想在数学中称为函数,Python中,也有类似的
2023-01-30

【12】Python函数学习(中)

作用域、局部和全局变量  前向引用:def test(name,age=18,*args,**kwargs):      print(name)    print(age,args,kwargs)    school("Test")   #
2023-01-31

MySQL基础教程12 —— 函数之其他函数

1. 位函数 对于比特运算,MySQL 使用 BIGINT (64比特) 算法,因此这些操作符的最大范围是 64 比特。|Bitwise OR: mysql> SELECT 29 | 15; -> 31 其结果为一个64比特无符号整数。&B
2022-05-17

12个Python数据处理常用内置函数分别是哪些

这篇文章给大家介绍12个Python数据处理常用内置函数分别是哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对pytho
2023-06-15

12 Python 复习

1.      实现1-100的所有的和sum = 0for i in xrange(1, 101):    sum += iprint (sum)2.      实现1-500所有奇数的和sum = 0for i in xrange(1,
2023-01-31

python 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。定义: 函数是指将一
2023-01-30

python 函数

自定义函数的规则:你可以定义一个由自己想要功能的函数,以下是简单的规则:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文
2023-01-31

Python函数

1.Python函数基础2.Python函数中的参数3.Python模块
2023-01-30

Python-函数

一.定义函数def 函数名([形式参数]):    函数体                    函数要执行的程序    return 返回值        如果没有return返回,默认返回值为None;函数名([实参])注意:有返回值
2023-01-31

python - 函数

*********************函数****************************                                                     ---乐高积木之函数定义函数•
2023-01-31

Python 函数调用&定义函数&函数参

一.函数调用在python中内置了很多函数,我们可以直接调用 。想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3/library/functions.ht
2023-01-30

[Python] 函数与函数编程

1. 函数使用def语句可定义函数:def add(x, y): return x + y函数体就是在调用函数时所执行的一系列语句。调用函数的方法是在函数名称后面加上参数。参数的顺序必须与函数定义匹配,否则会引发TypeError异常
2023-01-31

函数参数python

函数中的默认参数,调用的时候可以给参数 赋值,也可以使用默认值 修改add函数如下add()函数第一个参数没有默认值,第二个函数b默认值是3,在调用函数的时候,只赋予了函数实际参数为2,也就是说该实际参数是2赋值给a,a+b后函数执行结果为
2023-01-31

python函数参数

#没有参数a = 123def xy(): print(a)xy()#执行结果123#一个参数def xy(a): print(a)xy('nihao')#执行结果nihao#多个参数def xy(a1,a2): prin
2023-01-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录