Python中如何自定义函数

目录
  • Python自定义函数
    • 自定义函数的语法
    • 自定义函数的实现
    • 自定义函数的调用
  • Python自定义函数基础概念
    • 函数定义语法
    • 函数文档字符串
    • 函数定义规则
    • 形参定义方式
    • 函数调用
    • 函数调用时参数的传递形式
    • 全局变量与局部变量
    • 函数的功能性
    • 函数式编程
    • 函数的 可重入性(结果唯一性)
  • 总结

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 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python自定义函数中的return和print使用及说明

    目录 首先,先来了解一下return 自定义函数时 如果return后还有代码需要被执行怎么办? 不加return语句会有怎样的结果 在自定义函数中,return和print有什么区别 总结 首先,先来了解一下return 以下所有代码都是在jupyter notebook中运行的. 自定义函数时 用return语句指定返回值,即函数运行最后得出的结果 举个例子: def Add(x,y): z = x+y return z def Ad(x,y): z = x+y return x 上边是我定

  • python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法: def 函数名(参数1,参数2,参数-): 函数体(语句块) return [返回值] 注意事项 函数名的命名规则:和标识符的基本规则是一样的,基本上由小写字母和数字下划线构成 def 是关键字,不能够修改(define的简称) 函数后面一定要加括号(英文状态的)括号里面是否加参数看具体情况 括号后面的冒号不能够忘记 函数体必须加上缩进(

  • Python 跨.py文件调用自定义函数说明

    0 前言 os.chdir() :用于改变当前python工作的目录到指定的路径 sys.path:是python搜索模块的一个路径集,为list,自定义的包可以把存放路径加进去,之后直接调用包名就行了. 1 同一文件夹 一般当前的工作路径是在搜索路径里面,所以不用sys.path.append,如果调用包的时候报错,先使用sys.path查看当前路径在不在list里,不在list里加进去才能直接调用自定义包. 一个文件夹内有两个 .py 文件: exe101.py FileWriteAbout

  • Python pandas自定义函数的使用方法示例

    本文实例讲述了Python pandas自定义函数的使用方法.分享给大家供大家参考,具体如下: 自定义函数的使用 import numpy as np import pandas as pd # todo 将自定义的函数作用到dataframe的行和列 或者Serise的行上 ser1 = pd.Series(np.random.randint(-10,10,5),index=list('abcde')) df1 = pd.DataFrame(np.random.randint(-10,10,(

  • python自定义函数实现最大值的输出方法

    python中内置的max()函数用来得到最大值,通过冒泡排序也可以. #!/usr/bin/python def getMax(arr): for i in range(0,len(arr)): for j in range(i+1,len(arr)): first=int(arr[i]) second=int(arr[j]) if first<second: arr[i]=arr[j] arr[j]=first print arr[0] arr1=[19,29,30,48] getMax(a

  • Python中如何自定义函数

    目录 Python自定义函数 自定义函数的语法 自定义函数的实现 自定义函数的调用 Python自定义函数基础概念 函数定义语法 函数文档字符串 函数定义规则 形参定义方式 函数调用 函数调用时参数的传递形式 全局变量与局部变量 函数的功能性 函数式编程 函数的 可重入性(结果唯一性) 总结 Python自定义函数 在Python编程中,可以使用已经定义好的函数,也可以自定义函数实现某些特殊的功能. 自定义函数的语法 在Python中,自定义函数的语法如下所示 def 函数名(参数):   函数

  • Python中的自定义函数学习笔记

    定义一个什么都不做的函数 复制代码 代码如下: >>> def a(): ... pass ... >>> def printHello(): ... print("hello") ... >>> printHello() hello >>> callable(printHello) True 顾名思义,callable函数用于判断函数是否可以调用: 有书上说,callable在Python3.0中已经不再使用,而

  • 浅谈python中的getattr函数 hasattr函数

    hasattr(object, name) 作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的). 示例: >>> hasattr(list, 'append') True >>> hasattr(list, 'add') False getattr(object,name,default): 作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其

  • 详解Python中的分组函数groupby和itertools)

    具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby #itertool还包含有其他很多函数,比如将多个list联合起来.. d1={'name':'zhangsan','age':20,'country':'China'} d2={'name':'wangwu','age':19,'country':'USA'} d3={'nam

  • 详解Python中的自定义密码验证

    目录 在测试:nut_and_bolt:️之前 试验contains_character TestContainsCharacter字符 试验is_valid_size TestIsValidSize 试验is_valid_password TestIsValidPassword 重构is_valid_password 结论 这些帖子将分为三个部分. 1.密码验证功能 2.重构密码验证函数 3.对密码验证功能进行单元测试 这是Python系列中自定义密码验证的第三部分,也是最后一部分.我们将看看

  • python中让自定义的类使用加号"+"

    目录 1.python的魔法方法__add__() 2.对CartoonImage重载“+” 2.1实现CartoonImage类 3.测试“+”是否能实现图像拼接 3.1对CartoonImage对象使用“+”操作 如果代码是“1+1”,那么python控制台必然输出2,这很符合我们对“数值类”的认识,“+”运算符必然能对数值进行加法. 假设自己现在想设计一个称为“动漫图片CartoonImage类”,能不能实现它的对象之间的“+”操作呢?比如想要对两个动漫图像对象cartoon_1和cart

  • 如何在Python 中使用 join() 函数把列表拼接成一个字符串

    目录 1.设置 end=’’ 2.拼接字符串(string) 3.举例 内容概要:如何把列表中的元素拼接为一个字符串呢?本文介绍了采用 join() 函数的解决方法. 问题:有一个列表,比如:letters=[‘a’,‘b’,‘c’],想要把列表的元素连续显示出来,应该怎么办? 解决办法: 1.设置 end=’’ 如何使Python中的print()语句运行结果不换行 的方法,设置 end=’’. 如下代码所示: letters=['a','b','c'] for letter in lette

  • 如何在Python 中使用 join() 函数把列表拼接成一个字符串

    目录 1.设置 end=’’ 2.拼接字符串(string) 3.举例 内容概要:如何把列表中的元素拼接为一个字符串呢?本文介绍了采用 join() 函数的解决方法. 问题:有一个列表,比如:letters=[‘a’,‘b’,‘c’],想要把列表的元素连续显示出来,应该怎么办? 解决办法: 1.设置 end=’’ 如何使Python中的print()语句运行结果不换行 的方法,设置 end=’’. 如下代码所示: letters=['a','b','c'] for letter in lette

  • 详解Python中的 type()函数

    目录 你好类型 type()和数字 序列类型 自定义数据类型 Python type() 函数摘要 将通过各种例子来了解如何在 Python 中使用 type() 函数. 你好类型 打印 "Hello World "几乎是你学习任何编程语言时做的第一件事.让我们用 type() 函数来检查一下. my_var = 'Hello World' print(type(my_var)) <class 'str'> 我们将在本文的所有例子中使用同一个 my_var变量用于本教程中的

  • Python中的id()函数指的什么

    Python官方文档给出的解释是 id(object) Return the "identity" of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same

随机推荐