谈一谈|如何利用函数的各种参数

简介: 谈一谈|如何利用函数的各种参数

问题描述

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。


解决方案

定义函数的时候,把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

使用方法

位置参数

可以先写一个计算平方的函数

def count(x):

   return x**2

对于count(x)函数,参数x就是一个位置参数,当调用count函数时,必须传入有且只有一个参数x

Print(count(5))

但当需要计算x的多次方时就需要再加一个参数

def count(x,n):

s=1

while n>o:

    n=n-1

    s=s*x

return s

修改后的count(x, n)函数有两个参数:xn,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数xn例如计算510次方。

Print(count(5,10))

默认参数:

由于经常计算x的平方,所以,完全还可以把第二个参数n设为默认值。

def count(x,n=2):

s=1

while n>0:

    n=n-1

    s=s*x

return s

print(count(5))

这样,当调用count(5)时,相当于调用count(5,2)而对于n>2的其他情况,就必须明确地传入n比如count(5,3)。但必选参数在前默认参数在后且默认参数必须指向不定变量

可变参数:

顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。要定义出这个函数,必须确定输入的参数。由于参数个数不确定,首先想到可以把abc……作为一个listtuple传进来,这样,函数可以定义如下:

def calc(n):

sum=0

for i in n:

    sum=sum+n*n

return sum

但是调用时,需要先组装出一个list或tuple:

关键字参数:

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

def person(name, age, **kw):     

print(‘name:’,name,age:,age,’other:’kw)

函数person除了必选参数nameage外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数也可以传入任意个关键字参数

>>> person('Bob', 35, city='Beijing')

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

def person(name,age *,city,job):

    print(name.age,city,job)


结语

Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

目录
相关文章
|
1月前
|
数据安全/隐私保护 C++ 容器
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(一)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
47 0
|
1月前
|
存储 并行计算 前端开发
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(二)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
39 1
|
1月前
|
安全 算法 编译器
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
【C++ 泛型编程 进阶篇】深入探究C++模板参数推导:从基础到高级
248 3
|
1月前
|
存储 算法 编译器
【C++ 函数 基础教程 第四篇】深入C++函数返回值:理解并优化其性能
【C++ 函数 基础教程 第四篇】深入C++函数返回值:理解并优化其性能
61 1
|
3月前
|
存储 C语言
深入浅出 C 语言:学变量、掌控流程、玩指针,全方位掌握 C 编程技能
C 语言介绍 C 语言的特性 C 语言相对于其他语言的优势 C 程序的编译 C 中的 Hello World 程序
48 2
|
算法 Oracle Java
深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
110 0
|
设计模式 JavaScript 前端开发
三分钟学Go语言——函数深度解析(上)
三分钟学Go语言——函数深度解析(上)
三分钟学Go语言——函数深度解析(上)
|
人工智能 大数据 Scala
函数的必要性和学习方法|学习笔记
快速学习函数的必要性和学习方法。
67 0
函数的必要性和学习方法|学习笔记
|
机器学习/深度学习 数据采集 存储
不谈高级原理,只用简单的语言来聊聊机器学习
不谈高级原理,只用简单的语言来聊聊机器学习
268 0
不谈高级原理,只用简单的语言来聊聊机器学习
|
存储 前端开发
前端基石:一段代码隐含了多少基础知识?
本文主要讲代码中隐含的基础知识
125 1