什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

函数内容以冒号起始,并且缩进。

return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None

函数基本使用

python中定义函数所用的关键字是def, def 函数名() : 冒号代替其他编程语言的大括号,然后换行缩进写的代码就是函数体。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def example():

'''

一个简单的函数

'''

print("Hello World !")

example()

打印结果:

Hello World !

三引号中间的内容属于函数的注释文档,注释的作用是告诉别人或以后查看代码知道能快速知道这段干嘛是做什么的。

函数还可以嵌套,也就是函数里面有函数

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def exapmle(name):

def go(name):

print('我最棒:' + name)

go(name)

example('小明')

打印结果:

我最棒:小明

函数的参数

形参和实参

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def example(username):

print("Hello World ! My name is " + str(username))

example("小明")

example("小花")

打印结果:

Hello World ! My name is 小明

Hello World ! My name is 小花

如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到313782132,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

这是一个带参数的函数,在函数example中,username就是一个形参,也就是形式参数,是用来接收调用函数时传入的参数,你传的是啥它就是啥,传人它就是人,传鬼它就是鬼的那种。

实参就是实际参数,在调用函数的时候,传递是小明,那么小明就是实参,传递的是小花,那么小花也是实参,实参传递给函数后,会赋值给函数中的形参,然后我们就可以在函数中使用到外部传入的数据了。

参数默认值

写Java的时候最痛恨的就是方法不能设置默认值,使得必须得重载才行。

python允许我们给函数的形参设置一个默认值,不传参数调用的话,就统一默认是这个值。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(username = '奥特曼'):

print("Hello World ! My name is " + str(username))

welcome("小明")

welcome()

打印结果:

Hello World ! My name is 小明

Hello World ! My name is 奥特曼

修改参数后影响外部

在函数中修改参数内容会不会影响到外部,这个问题取决于实参的类型是不是可变的,可不可变就是可不可以修改。

字符串就是一种不可变的类型。

比如:

name = “小明”

name = “小花”

请问,我是把"小明"修改成了"小花"吗? 答案是 非也。

实际上我是把"小花"这个字符串赋值给了name,让name指向了这个新字符串,替换掉了原来的"小明",原来的"小明"仍然是"小明",没有受到一点改变。

在python中,不可变类型有:整数、字符串、元组,可变类型有:列表、字典。如果传递的参数包含可变类型,并且在函数中对参数进行了修改,那么就会影响到外部的值。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def change(lis):

lis[1] = '小明他二舅'

names = ['小明','小花','小红']

change(names)

print(names)

打印结果:

[‘小明’, ‘小明他二舅’, ‘小红’]

如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到313782132,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

如果我们不希望出现这种事情,那么就将对象复制一份再传递给函数。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def change(lis):

lis[1] = '小明他大爷'

names = ['小明','小花','小红']

change(names[:])

print(names)

打印结果:[‘小明’, ‘小花’, ‘小红’]

我们用切片的方法拷贝了一份names,函数中尽管修改了参数,也不过是修改的是副本,不会影响到原始的names。

关键字参数

关键字参数让你可以不用考虑函数的参数位置,你需以键值对的形式指定参数的对应形参。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(name,address):

print(f"你好 {name} , 欢迎来到 {address} !")

welcome(address='长沙',name='小强')

打印结果:你好 小强 , 欢迎来到 长沙 !

收集参数

有时候我们需要允许用户提供任意数量的参数,函数的形参可以带个星号来接收,不管调用函数的时候传递了多少实参,都将被收集到形参这个变量当中,形参的类型是元组。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(*names):

print(names)

welcome('乐迪','天天','酷飞','小黑')

打印结果:(‘乐迪’, ‘天天’, ‘酷飞’, ‘小黑’)

还有一种是带两个星号的形参,用于接收键值对形式的实参,导入到函数中的类型是字典。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(**names):

print(names)

welcome(name='小明',age=20,sex='男')

打印结果:{‘name’: ‘小明’, ‘age’: 20, ‘sex’: ‘男’}

分配参数

分配参数是收集参数的相反操作,可使得一个元组或字典变量自动分配给函数中的形参。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(name,address):

print(f"你好 {name} , 欢迎来到 {address} !")

a = ('小明','广州')

welcome(*a)

打印结果:你好 小明 , 欢迎来到 广州 !

我们改成字典的方式:

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def welcome(name,address):

print(f"你好 {name} , 欢迎来到 {address} !")

a = {'address':'山东','name':'小红'}

welcome(**a)

打印结果:你好 小红 , 欢迎来到 山东 !

函数的返回值

首先说明,所有的函数都是有返回值的,如果编程人员没有指定返回值,那么默认会返回None,对标其他语言中的null。

一个简单的函数返回值的例子:

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def get_full_name(first_name,last_name):

return first_name + last_name

r = get_full_name('王','大拿')

print(r)

打印结果:王大拿

然而python中的函数还可以返回多个值,返回出的值被装载到元组中:

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def func(num):

return num**2,num**3,num**4

result = func(2)

print(result)

打印结果:(4, 8, 16)

在python中函数定义的时候没有返回值的签名,导致我们无法提前知道函数的返回值是什么类型,返回的什么完全看函数中的return的是什么,特别是逻辑代码比较多的函数,比如里面有多个if判断,有可能这个判断return出来的是布尔值,另一个判断return出来的是列表,还一个判断啥也不return,你调用的时候你都搞不清楚该怎么处理这个函数的返回值,在这一点来说,Java完胜。

所以在无规则限制的情况下,代码写的健不健壮,好不好用,主要取决于编程人员的素质。

匿名函数

匿名函数就是不用走正常函数定义的流程,可以直接定义一个简单的函数并把函数本身赋值给一个变量,使得这个变量可以像函数一样被调用,在python中可以用lambda关键字来申明定义一个匿名函数。

我们把王大锤的例子改一下:

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

get_full_name = lambda first_name,last_name : first_name + last_name

r = get_full_name('王','大锤')

print(r)

打印结果:王大锤

函数的作用域

访问全局作用域

python每调用一个函数,都会创建一个新命名空间,也就是局部命名空间,函数中的变量就叫做局部变量,与外部的全局命名空间不会相互干扰。

这是常规状态,当然也会有非常规需求的时候,所以python给我们提供了globals()函数,让我们可以在局部作用域中访问到全局的变量。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author : 程序员张无忌

def func():

a = globals()

print(a['name'])

name = '小明'

func()

打印结果:小明

globals()函数只能让我们访问到全局变量,但是是无法进行修改的,如果我们要修改全局变量,需要用到global关键字将全局变量引入进来。

#! /usr/bin/python3

# -*- coding:utf-8 -*-'

# @FileName: day4.py

# @Time : 2020/8/8 20:47

# @Author :程序员张无忌

def func():

global name

name = '小花'

name = '小明'

func()

print(name)

打印结果:小花

如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到313782132,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术

python不会怎么办_怕你还不会Python函数,我特意为你整理了一篇博客相关推荐

  1. python 图像变化检测_Python OpenCV 霍夫(Hough Transform)直线变换检测原理,图像处理第 33 篇博客...

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 33 篇. 基础知识铺垫 霍夫变换(Hough Transform)是图像处理领域中,从图像中识别几 ...

  2. python正弦波叠加方波_傅立叶变换还能画简笔画?谷歌工程师开发的这个试玩网站火了...

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 无论是处理声音和图像信号,都必须用到傅立叶变换.其实除了这些"正经"用途,它还能做一些有意思的事情. 最近,一位名叫Je ...

  3. python制作音乐相册_阿里大牛教你做Python炫酷音乐海报,拿去跟小伙伴炫耀!

    前言 前段时间在一个朋友那么得到的灵感,想到可以用音乐播放页面作为一张海报图片.其实接下来要讲的和海报还是有差距的,而具体实现也只是简单的图片粘贴,但是在效果上还是不错的.效果图如下,希望大家喜欢: ...

  4. python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...

    之前写的都是针对爬虫过程中遇到问题的解决方案,没怎么涉及到实际案例.这次,就以博客园为主题,写一个自动私信博客下的评论人员(在本篇留下的评论的同学也会被自动私信,如果不想被私信,同时又有问题,请私信我 ...

  5. 如果你不了解 python 的学习体系?来看看这篇博客吧 ,特邀嘴强擦哥做点评|Python技能树测评

    这是一次联动写作~ 特邀擦哥为大家介绍 C 站一款新产品,<python 技能树>.内测地址为 https://bbs.csdn.net/skill/python. 内测版的技能树,是对 ...

  6. python pip安装第三方包速度慢,这篇博客给你安排清楚了

    文章目录 ⛳️ 实战场景 ⛳️ pip 国内高速源 首推清华源 其它源 永久配置源 ⛳️ 实战场景 作为 Python 的初学者,经常要用到第三方模块的安排,常规情况下,直接使用下述命令,然后就等待去 ...

  7. 这篇博客记录廖雪峰python教程的习题(一)

    函数 函数的参数 "以下函数允许计算两个数的乘积,请稍加改造,变成可接收一个或多个数并计算乘积: def product(x,y): return x*y 由于是可以接收一个或多个参数,所以 ...

  8. 如果你需要用Python搞个二维码,那应该收藏这篇博客

    文章目录 ⛳️ 交代背景 ⛳️ pyqrcode 实现二维码 ⛳️ qrcode 实现二维码 ⛳️ MyQR 实现二维码 ⛳️ Amazing-QR 实现二维码 ⛳️ 交代背景 作为一名合格的 Pyt ...

  9. 弹窗中的彩蛋!一款在线开发工具 JupyterNotebook,一篇博客就会用|Python技能树测评

    昨天测评<python 技能树> 之后发现一个彩蛋,JupyterNotebook 在线编码工具. 文章目录 弹窗中的彩蛋 初步了解 运行代码 编写文档 补充一下小知识点 彩蛋里的意外发现 ...

最新文章

  1. 27. FormPanel类的defaults属性
  2. Tips_方格拼图效果
  3. get/post时中文乱码问题的解决办法
  4. linux 免密码登录
  5. weblogic获取应用目录路径
  6. Magento 2开发教程 - 创建新模块
  7. ubuntu16.04 gcc降级到4.8
  8. 转《JAVA和C#得相同点和不同点》
  9. python免费网课-Python网课推荐——免费学习Python编程
  10. 网页滚动条向下拉动奇慢的原因
  11. 【大数据部落】 17年房贷市场数据调研报告
  12. python出行轨迹记录_Python中的自动路径绘制,python,轨迹
  13. wps 甘特图_强烈推荐5款在线甘特图工具,又简单又清爽又好用
  14. win10系统在Vs2012工具菜单中添加ildasm.exe工具的操作办法
  15. java 如何防止重复提交_干货实战~Java如何防止接口重复提交
  16. 2021-01-19 灵动ICPC集训
  17. Android集成GMS服务及GMS认证方案
  18. mc服务器bug修复,我的世界服务器BUG解决办法大全
  19. 监控网络行为——公务员上班玩游戏
  20. Web of Science如何导出参考文献

热门文章

  1. mysql中的各种函数(日期函数、字符串函数、数学函数...)
  2. python的csv标准库,Python标准库: csv模块——CSV文件的读写
  3. i++和++i作为参数时的编译器处理方式分析
  4. golang字节数组拷贝BlockCopy函数实现
  5. Python-Flask构建微信小程序订餐系统-Flask打造高可用flask mvc框架-08
  6. CoffeeScript 学习笔记
  7. Hadoop集群(第2期)_机器信息分布表
  8. python面试题之简要描述Python的垃圾回收机制(garbage collection)
  9. SpringBoot整合Shiro实现权限控制,验证码
  10. postgresql 按日期范围查询