作为新手自学Python的第九天,技术低微,希望可以通过这种方式督促自己学习。

个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)

———————————————————————————————————————————

函数就是执行特定任务和完成特定功能的一段代码

为什么需要函数

复用代码

隐藏实现细节

提高可维护性

提高可读性便于调试

1、函数的创建和调用

1.1 函数的创建:

def 函数名 ([输入参数]):

函数体

[return xxx]

def calc(a, b):c = a + breturn c

1.2 函数的调用:

函数名 ([实际参数])

result = calc(10, 20)
print(result)

2、函数的参数传递

函数调用的参数传递

位置实参:根据形参对应的位置进行实参传递

def cale(a, b): # a, b称为形式参数,简称形参,形参的位置出现在函数的定义处c = a + breturn c
​
result = cale(10, 20)   # 10, 20称为实际参数的值,简称实参,实参的位置出现在函数的调用出
print(result)

关键字实参:根据形参名称进行实参传递

res = cale(b=10, a=20)  # = 左侧的变量的名称称为关键字参数
print(res)

3、函数的返回值

函数返回多个值时,结果为元组

def fun(num):odd = []    # 存奇数even = []   # 存偶数for i in num:if i%2:     # 判断余数是否为0,python中0的布尔值为False,非0的布尔值为Trueodd.append(i)   # i%2为True时,将i存入odd[]else:even.append(i)  # i%2为False时,将i存入even[]return odd, even
​
print(fun([10, 29, 34, 23, 44, 53, 55]))
"""
结果为:
([29, 23, 53, 55], [10, 34, 44])
"""

函数的返回值:

(1)如果函数没有返回值(即函数执行完毕不需要给调用处提供数据),return可以省略

(2)函数的返回值是1个,直接返回类型

(3)函数的返回值是多个,则返回的结果为元组

4、函数的参数定义

4.1 函数定义默认值参数

函数定义时给形参设置默认值,只有与默认值不符的时候才需要传递实参

def fun(a, b=10):print(a, b)
​
fun(100)        # 100 10
fun(20, 30)     # 20 30

4.2 个数可变的位置参数

定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数

使用*定义个数可变的位置形参

结果是一个元组

def fun(*args):print(args)
​
​
fun(10)
fun(10, 20, 30)
"""
结果为:
(10,)
(10, 20, 30)
"""

可变的位置参数只能是1个

4.3 个数可变的关键字形参

定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参

使用**定义个数可变的关键字形参

结果为一个字典

def fun(**args):print(args)
​
​
fun(a=10)
fun(a=10, b=20, c=30)
"""
结果为:
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}
"""

可变的关键字参数只能是1个

在一个函数的定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求个数可变的位置形参放在个数可变的关键字形参之前

def fun(a, b, c):   # a, b, c在函数的定义处,是形式参数print('a=', a)print('b=', b)print('c=', c)
​
​
fun(10, 20, 30)     # 位置参数
lst = [11, 22, 33]
print('-------------')
fun(*lst)           # 在函数调用时将列表中的每个元素都转换为位置实参传入
print('-------------')
fun(a=100, c=300, b=200)    # 关键字参数
print('-------------')
dic = {'a': 111, 'b': 222, 'c': 333}
fun(**dic)          # 在函数调用时,将字典的键值对都转换为关键字实参传入
print('-------------')
"""
结果为:
a= 10
b= 20
c= 30
-------------
a= 11
b= 22
c= 33
-------------
a= 100
b= 200
c= 300
-------------
a= 111
b= 222
c= 333
-------------
"""

需求:c,d只能采用关键字实参传递

def fun4(a, b, *, c, d):    # 从*之后的参数在调用时,只能采用关键字传递print('a=', a)print('b=', b)print('c=', c)print('d=', d)
​
​
# fun4(10, 20, 30, 40)    位置实参传递,此时c,d参数传递不合规
fun4(a=19, b=29, c=39, d=49)    # 关键字实参传递
fun4(18, 28, c=38, d=48)    # 前两个是位置实参,后两个是关键字实参
"""
结果为:
a= 19
b= 29
c= 39
d= 49
a= 18
b= 28
c= 38
d= 48
"""

函数定义时的形参的顺序问题

def fun5(a, b, *, c, d, **args):pass
​
​
def fun6(*args, **args2):pass
​
​
def fun7(a, b=10, *args, **args2):pass

5、变量的作用域

作用域:程序代码能访问的该变量的区域

根据变量的有效范围可分为:

(1)局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,实际上为全局变量

(2)全局变量:函数体外定义的变量,作用于函数内外

def fun(a, b):c = a + b  # c为局部变量,a、b为形参,作用范围也是函数内部,相当于局部变量print(c)
​
​
name = '萨贝尔'  # name的作用范围为函数内外部皆可 ——> 全局变量
print(name)
​
​
def fun2():print(name)
​
​
fun2()
​
​
def fun3():global age  # 局部变量使用global声明,实际上为全局变量age = 20print(age)
​
​
fun3()
print(age)

global声明方式只能在函数内使用

Python自学第九天——函数相关推荐

  1. Python自学记录——返回函数、匿名函数、装饰器与偏函数

    国庆节快乐~~虽说今天是假期的最后一天.. 好久没学习Python了..值得高兴的是 <怪物猎人:世界>目前所有的龙我(统枪)都打过一遍了 (/得意). 正题,开始学习.记录: 返回函数 ...

  2. python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]

    python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...

  3. Python练习题——第九题:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n

    Python练习题第九题 题目: 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+-+1/n,当输入n为奇数时,调用函数1/1+1/3+-+1/n #2019/12/26/18:16def f ...

  4. 无字天书之Python第九页(函数)

    博客目录 传送门 函数 定义函数以及使用以及规则 简单使用(参数的传递) 变长度传递参数 变量作用域 匿名函数 递归函数 过年不停更之第三更 传送门 无字天书之Python第一页 无字天书之Pytho ...

  5. python课程内容-Python自学难吗?有哪些课程内容?

    自学一门技能,本身就有难度,更何况还是编程类型的Python,要是有兴趣还好说,兴趣是 原始动力.但是光有兴趣还远远不够,要足够坚持才能学有所成.那么Python自学难吗?本 文将为大家来解答! 前期 ...

  6. 自学python考哪些证书-Python自学难吗?有哪些课程内容?

    自学一门技能,本身就有难度,更何况还是编程类型的Python,要是有兴趣还好说,兴趣是 原始动力.但是光有兴趣还远远不够,要足够坚持才能学有所成.那么Python自学难吗?本 文将为大家来解答! 前期 ...

  7. Python自学难吗?Python课程主要学些什么内容?

    自学一门技能,本身就有难度,更何况还是编程类型的Python,要是有兴趣还好说,兴趣是原始动力.但是光有兴趣还远远不够,要足够坚持才能学有所成.那么Python自学难吗?本文将为大家来解答! 前期可以 ...

  8. java和python自学教程视频_免费视频教程,2019年最新Java、PYthon、web视频

    干货视频,培训机构最新java.Python.web前端.人工智能视频(基础班+就业班).价值几万的Java.PYthon.web.人工智能视频教程, 为还在学习迷茫的你提供一个学习Java.Pyth ...

  9. Python自学路线图之Python进阶

    Python自学路线图的第二个阶段是Python进阶学习,自学完后需要掌握的Python技能: 1.自学Linux操作系统,熟练使用Linux操作系统: 自学网络编程,掌握网络编程相关技术, 能够实现 ...

最新文章

  1. 在Leangoo里怎么修改昵称,简称,头像?
  2. c# oldb连接_C#使用 OleDbConnection 连接读取Excel
  3. mysql二进制包下的support-files文件夹
  4. hostapd中扫描的调用过程
  5. ubuntu 13.04下MYSQL 5.5环境搭建
  6. PostgreSQL字符集问题
  7. 不使用第三个变量交换两个变量的值
  8. Android Audio代码分析2 - 函数getMinBufferSize
  9. 关于Debug.exe
  10. 你真的理解clear:both吗?
  11. Spring源码解读(1)-IOC容器BeanDefinition的加载
  12. Android高级控件(六)——自定义ListView高仿一个QQ可拖拽列表的实现
  13. 马蜂窝火车票系统服务化改造初探
  14. react脚手架配置代理
  15. 【代码片段分享】获取公历日期阴历日期二十四节气干支纪年传统节日Java版
  16. 枚举——数组中的最长山脉
  17. egret 图文并排
  18. 零基础学习C++系列课程(九) 持续更新中
  19. 多行文字内容溢出显示点点点(...)省略号
  20. sublime 实现浏览器预览功能

热门文章

  1. ubuntu18关闭系统自动更新
  2. python制作图例_python plt可视化——打印特殊符号和制作图例代码
  3. select 函数详解
  4. html5 jsplumb,jsPlumb开发入门教程(实现html5拖拽连线)
  5. AI设计:如何给动作游戏的敌人设计人工智能?
  6. 如何处理百亿级别的数据信息
  7. unity 修改文件后缀_unity文件操作-添加。修改。删除
  8. ES6新特性及其用法
  9. 非技术手段获取同学信息
  10. CPU核心数与线程数