5.1Python函数(一)
目录
前言
分模块思想,分任务编程,是编程的一大重要思维,其中的实现,函数就担当了一个重要角色,今天我们就来学习Python的初级函数。
(一)函数的基本知识
(1)函数的优点
- 体积小,减少内存大小,冗余度小。
- 重用性强,可重复利用。
- 维护方便。
- 分解任务,简化逻辑,使代码更加模块化。
(2)函数的分类
- 内建函数
- 三方函数
- 自定义函数
(二)函数的基本使用
1.函数的简单定义
(1)语法说明
def 函数名():
函数体
(2)源代码
# 定义一个简单函数
def test():
print(2**2)
print(2**3)
print(2**4)
# 调用函数
test()
(3)输出效果
2.传值函数
(1)语法说明
定义语法:
def 函数名(var1,var2,……)
函数体
调用的时候,有两种方式:
- 顺序调用,要求实参与形参一一对应。
- 关键字调用,可以不按照顺序调用。
(2)源代码
# 定义一个带参数的函数
def test(var1, var2):
print(var1+var2)
print(var1**2+var2**2)
print(var1**3+var2**3)
# 顺序调用带参数的函数
print("顺序调用")
test(1, 2)
# 关键字调用带参数函数
print("关键调用")
test(var2=2, var1=1)
(3)输出效果
3.不定长函数
(1)语法说明
当形参为下面两种形式的时,为不定长参数
- *args --- 接收为元组类型, 只要使用星号就可以,名字没关系,习惯用args而已。
- **kwargs ---接收为字典类型。其传值时,必须是关键字传值。
注意:装包与拆包
- 装包:args与kwargs 就是表示整个元组与字典的整体,叫装包
- 拆包:*args 与 **kwargs 表示元组和字典的每个元素,叫拆包
(2)源代码
# 定义不定长的参数- *args 接收的是元组类型
def test1(*args):
print(args, type(args))
print(*args)
# 定义不定长的参数- *args 接收的是字典类型
def test2(**kwargs):
print(kwargs, type(kwargs))
# 输出keyword
print(*kwargs)
# 使用value,不能打印出来,不过可以使用
# 而且形参与实参的keyword一样,其实就是关键字调用
test3(**kwargs)
def test3(a, b, c):
print(a)
print(b)
print(c)
# 调用参数,并接收的是 元组
test1(1, 2, 3)
# 调用参数,并接收的是 字典
test2(a="zsj", b=18, c="m")
(3)输出效果
4.缺省函数
(1)语法说明
在定义函数的时候,给形参赋值,就是缺省函数,所赋的值便是默认值,
def test(name="me")
而在调用的时候,可以传入参数,也可以不传入参数。
传入参数时,以所传的参数优先。
不传入参数时,为默认值。
(2)源代码
# 定义缺省参数
def test(name="zyg"):
print(name)
# 不传入参数, 默认值
test()
# 传入参数,优先值是传入的值
test("me")
(3)输出效果
5.函数的传值过程
(1)语法说明
在python里函数的传值:都是引用传递
- 值传递(从实参复制一个副本)传递给形参
- 引用传递(直接把实参的id)传给形参
Python的可变数据类型与不可变数据类型
- 可变数据类型:value值改变,id值不改变。(列表,字典)
- 不可变类型:value值改变,id值随之改变。(数值类型,字符串类型,布尔类型,元组类型)
Python里函数是否可以改变实参内容问题
- 若实参是可变数据类型,则可以实参内容
- 若实参是不可变数据类型,则不可以实参内容
(2)可变类型的实例
# 定义一个函数,用id()来判断其是值传递,还是地址传递?
def test(num):
print(id(num))
num[1] = 5
print(num)
print(id(num))
list1 = [1, 2, 3]
print(id(list1))
test(list1)
print("最后的id", id(list1))
print("最后的值", list1)
(3)不可变类型的实例
# 定义一个函数,用id()来判断其是值传递,还是地址传递?
def test(num):
print(id(num))
num = 5
print(num)
print(id(num))
number = 1
print(id(number))
test(number)
print("最后的id", id(number))
print("最后的值", number)
6.具有返回值函数
(1)语法说明
当我们需要函数处理过后,返回一个结果值。可以使用
return 结果值
结果值:可以是元组类型,列表类型,拆包后的数据
(2)源代码
# 定义一个具有返回值的函数
def test(a, b):
mysum = a + b
mysub = a - b
return (a, b)
n1 = 4
n2 = 2
sum_1, sub_1 = test(n1, n2)
print(sum_1)
print(sub_1)
(3)输出效果
7.函数的使用说明
(1)说明:
函数的说明都有一个标准的写法,才能调用help查看
def 函数名():
"""
功能:xxxxx
var1:
var2:
....
return xxxx
"""
查看帮助可以用:help(函数名) ,注意是函数名,不是函数调用。
(2)源代码
# 定义一个具有返回值的函数
def test(a, b=1):
"""
功能:该函数实现两个值的加减,并返回结果。
:param a: 参与运算的一个值,数字类型,不可选,无默认值
:param b: 参与运算的另一个值,数字类型,可选,默认值为1
:return: 和与差的结果,元组类型。例如 (1, 2)
"""
mysum = a + b
mysub = a - b
return (a, b)
# 查看帮助
help(test)
(3)输出效果
作者:Mark
日期:2019/02/02 周六
5.1Python函数(一)的更多相关文章
- 5.2Python函数(二)
目录 目录 前言 (一)偏函数 ==1.说明== ==2.原代码== ==3.显示效果== (二)高阶函数 ==1.说明== ==2.源代码== ==3.运行效果== (三)返回值函数 ==1.说明= ...
- 2.1Python数据处理篇之---内建有关数学的函数
目录 目录 前言 (一)数学相关得内建函数 (二)具体演示 1.求绝对值 2.创建一个复数 3.求商和余数 4.求x得y次幂 5.生成一个序列 6.四舍五入 7.对一个集合求和 8.求最大值 9.求最 ...
- 【学习总结】GirlsInAI ML-diary day-14-function函数
[学习总结]GirlsInAI ML-diary 总 原博github链接-day14 认识函数function 函数相当于一个固定的公式,一个映射.有输入,有输出. 1-python内置函数 max ...
- PYDay6- 内置函数、验证码、文件操作、发送邮件函数
1.内置函数 1.1Python的内置函数 abs() dict() help() min() setattr() all() dir() hex() next() slice() any() div ...
- 17.3.13---join函数
1-----Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成 ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- C++对C的函数拓展
一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...
随机推荐
- Java 动态生成 PDF 文件
每片文章前来首小诗: 今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天. --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...
- 从零开始学 Web 之 HTML5(一)HTML5概述,语义化标签
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 【API知识】ElementUI一些问题的解决方案
前言 本人并不是前端开发人员,不过前端的界面和交互也没少写.以下整理一下我在使用elementUI过程中遇到的问题和对应的解决方案. 正文 1.表格字段过长省略 elmentUI的table-colu ...
- apache tomcat搭建负载均衡(实现集群中的session同步)
原理:tomcat 做个WEB服务器有它的局限性,处理能力低,效率低.承受并发小(1000左右).但目前有不少网站或者页面是JSP的.并采用了tomcat做为WEB,因此只能在此基础上调优. 目前采取 ...
- go runtime.Gosched()的作用分析
untime.Gosched()用于让出CPU时间片.这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑. 看代码: package main ...
- BizTalk 新增/修改/删除 XmlDocument 名字空间的高效方法
新增一个名字空间 public class AddXmlNamespaceStream : XmlTranslatorStream { private String namespace_; priva ...
- Linux IPC基础(System V)
简介 IPC 主要有消息队列.信号量和共享内存3种机制.和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具: 由以上可以看出,一个 IPC 至少包含 ...
- 微服务学习二:springboot与swagger2的集成
现在测试都提倡自动化测试,那我们作为后台的开发人员,也得进步下啊,以前用postman来测试后台接口,那个麻烦啊,一个字母输错就导致测试失败,现在swagger的出现可谓是拯救了这些开发人员,便捷之处 ...
- mapreduce的cleanUp和setUp的特殊用法(TopN问题)和常规用法
一:特殊用法 我们上来不讲普通用法,普通用法放到最后.我们来谈一谈特殊用法,了解这一用法,让你的mapreduce编程能力提高一个档次,毫不夸张!!!扯淡了,让我们进入正题: 我们知道reduce和m ...
- Fundebug是这样备份数据的
摘要: 数据还是要备份的,万一删库了呢? 本文代码仓库: fundebug-mongodb-backup 引言 今年8月,腾讯云竟然把客户前沿数据的数据弄没了,Fundebug在第一时间进行了一些简单 ...