Python中如何自定义函数
作者:棉猴 发布时间:2021-12-12 20:20:58
Python自定义函数
在Python编程中,可以使用已经定义好的函数,也可以自定义函数实现某些特殊的功能。
自定义函数的语法
在Python中,自定义函数的语法如下所示
def 函数名(参数):
函数体
其中,def是关键字;之后跟的是函数名,通过函数名来调用该函数;函数名之后是一个圆括号,圆括号内部是函数的参数,通过参数可以将数据传递到函数内部;函数体是函数实现的功能。
需要注意的是(1)在圆括号之后有冒号(2)函数体要有缩进。
自定义函数的实现
图1的代码中代码自定义了一个名为func的函数。
图1 自定义函数func
其中,该自定义函数的函数名是func,i是func的参数。func()函数的功能是打印出从0到i-1的数字,i的值由外部传递到函数内部。
自定义函数的调用
通过图2中的代码调用自定义函数func()。
图2 调用func()函数
其中,func()函数的参数设置为3,此时输出的是0-2的数字;修改func()的参数值,如图3所示。
图3 修改func()函数的参数值
此时输出的是0-4的数字。
Python自定义函数基础概念
函数定义语法
def 函数名(形参列表):
语句块
函数定义语句(def 语句) 的完整语法:
[@装饰器1] [@装饰器2] [...]
def 函数名([位置形参], [*元组形参], [命名关键字形参], [**字典形参]):
'''文档字符串'''
语句块
注: [] 中括号代表其内部可以省略
函数文档字符串
函数内第一次未被赋值给任何变量的字符串是此函数的文档字符串。
说明:
1. 文档字符串通常用来说明本函数的功能和使用方法
2. 在交互模式下输入: help(函数名) 可以查看函数的'文档字符串'
3. 函数的文档字符串绑定在函数的 __doc__ 属性上
函数定义规则
1. 函数的名字就是语句块的名称
2. 函数名的命名规则与变量名相同(函数名必须是标识符)
3. 函数名是一个变量(不要轻易对其赋值)
4. 函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内可以访问函数外部的变量,但不能修改此变量。
5. 函数如果不需要传入参数,形参列表可以为空
6. 语句块部分,内容不能为空,如果为空需要填充pass
形参定义方式
形参:函数调用时,接收调用时传递的数据
【1】位置形参
【2】关键字形参
【3】缺省参数
def 函数名(形参名=默认实参1, 形参名2=默认实参2, ...):
pass
缺省参数必须自右至左依次存在,如果一个参数是缺省参数,则其右侧的所有参数都必须是缺省参数。
【4】*args
星号元组形参,收集多余的位置传参
def 函数名(*元组形参名):
pass
【5】**kwargs
双星号字典形参,收集多余的关键字传参
def 函数名(**字典形参名):
pass
【6】不定长形参
星号元组形参,双星号字典形参
可以接受任意的位置传参和关键字传参
def fun(*args,**kwargs):
pass
位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用.
函数形参自左至右的顺序为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
函数调用
函数名(实参)
注:
1. 函数调用是一个表达式
2. 如果函数内部没有return语句,函数调用完毕后返回None对象
3. 如果函数需要返回其它的对象需要用到 return 语句
4.函数名是一个变量,绑定的是函数对象
函数调用时参数的传递形式
【1】位置传参
实参和形参的位置对应,将实参数据传递给函数形参。
实参和形参按位置一一对应。
实参个数和形参个数必须一致。
【2】序列传参
位置传参的一种。
用 * 将序列拆解后按位置进行传递的传参方式
【3】关键字传参
按形参的名称将实参数据传递给形参。
实参和形参按形参名称匹配。
【4】字典关键字传参
实参为字典,将字典用'**' 拆解后再进行关键字传参的传参方式。
字典的键名必须和形参一致,切数量相同。
字典的键必须为字符串。
全局变量与局部变量
【1】全局变量
① 定义在函数外部,模块内部的变量称为全局变量
② 全局变量所有函数都可以直接访问(但函数内不能将其直接赋值)
【2】局部变量
① 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
② 局部变量只能在函数内部使用
③ 局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁
函数的功能性
① 一个函数可以作为另一个函数调用时的实参,传递给此函数
def f1():
print("f1被调用")
def f2():
print("f2被调用")
def fx(fn):
print(fn)
fn() # 此时这是调用什么呢?
fx(f1)
fx(f2)
#结果
<function f1 at 0x7f7a52ed6f28>
f1被调用
<function f2 at 0x7f7a51757c80>
f2被调用
#---------------------
def goodbye(L):
for x in L:
print("再见:", x)
def hello(L):
for x in L:
print("你好:", x)
def operator(fn, L):
fn(L)
operator(hello, ['Tom', 'Jerry', 'Spike'])
#结果
你好: Tom
你好: Jerry
你好: Spike
② 一个函数可以作为另一个函数的返回值
def fx():
return max
fn = fx()
print(fn([1, 3, 5, 7]))
#结果
7
③ 函数可以嵌套
函数式编程
用一系列函数解决问题。
优点:
【1】用每一个函数完成细小的功能,一系列函数的任意组合可以完成大问题
【2】函数仅接受输入并产生输入,不包含任何能影响输出的内部状态
要求:
def 语句创建的函数最好不要访问局部作用域以外的变量,这样可以保证返回结果的唯一性(可重入性)
函数的 可重入性(结果唯一性)
如果一个函数的输入参数一定,则返回结果必须一定的函数称为可重入函数
【1】 可重入函数,传入参数一定.结果必然一定
def myadd(x, y):
return x + y
【2】不可重入函数:
y = 200
def myadd2(x):
return x + y
print(myadd2(10)) # 210
y = 300
print(myadd2(10)) # 310
来源:https://blog.csdn.net/hou09tian/article/details/123055809


猜你喜欢
- 前言这是我之前安装的mysql5.7,然后想换成mysql8.0就有这篇,差不多跟着操作应该可以删除干净。一、你要先查询你是否安装了mysq
- 设计是简单的如果你知道要放的东西该放到哪。曾经在某个电子杂志里看到一篇关于如何在平面设计中偷懒的文章,引发了我的一些思考,在平面设计中有这么
- isdigit() isalpha()用于判断字符串的类型要求1统计某个字符串中的数字数量并输出,例如字符串为“adsf
- 需要把ip地址转换为10进制数,然后也可以把10进制数转化为ip地址,计算机ping这个十进制数可以ping通对应的ip地址,说明已经实现功
- MySQL和MariaDB的关系MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。MariaDB
- Gtalk 软件的最下方有个很好又很实用的功能,就是 Gmail 邮件提醒功能。会定时更新你 Gmail 中未读新邮件的数量。试想
- vue2的方式1. 全局挂载Vue.property.xxximport Vue from "vue";import a
- 前言:经过一段时间的测试验证,决定使用RPM来做Golang服务的部署方式. 我们组关于代码的部署方式主要有这么几种,Python直接使用v
- Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes
- 在上一讲代码的基础上,做进一步修改,成为了如下程序,请看官研习这个程序:#!/usr/bin/env python#coding:utf-8
- PHP PDO连接连接是通过创建 PDO 基类的实例而建立的。不管使用哪种驱动程序,都是用 PDO 类名。连接到 MySQL<?php
- 本笔记目的是通过tensorflow实现一个两层的神经网络。目的是实现一个二次函数的拟合。如何添加一层网络代码如下:def add_laye
- python的uuid都是32位的,比较长,处理起来效率比较低,本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六
- 最近在用python连接sqlserver读取数据库,读取数据时候在本机电脑正常,但是把程序部署到服务器运行时一直报错“未发现数据源名称并且
- <?php/** * 网站地图更新控制器 * * &nbs
- 1、 变量及其作用域:变量分为“全局变量”和“局部变量”,“全局变量”申明在函数外部,可供所有函数使用,而“局部变量”申明在函数体内部,只能
- Vuex 中有以下几个核心概念:State:应用程序的状态存储在单一的状态树中,即 State。State 可以通过 store.state
- 前言相信用过Range的朋友们都知道,Go语言中的range关键字使用起来非常的方便,它允许你遍历某个slice或者map,并通过两个参数(
- GitLab是一款使用MIT许可证的基于网络的Git仓库管理工具,我们可以使用它来搭建自己的Git仓库,本文将介绍如何使用Gitlab在Li
- 用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧。中级 - 0.74秒 3BV/S=60.81相信许多人很早就