Python的函数定义简单,但灵活度非常大。功能强大意味复杂。为了复习,把廖雪峰老师的该课程做个回顾。

参数有:必选参数、默认参数、可变参数、关键字参数、命名关键字参数。

计算x的n次方函数:

def    power(x,n):
s=1
while n > 0:
n=n-1
s=s*x
return s

每次调用:power(5,1),power(5,10)等等。

如果使用默认参数就可以省略。如:

def    power(x,n=2):
s=1
while n > 0:
n=n-1
s=s*x
return s

调用 5的一次方:power(5)。对于大于2的情况,就必须明确传入参数n power(5,3)。

1、默认参数的关键点:

一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);

二是如何设置默认参数。

当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

多个默认参数时:可以和数据库表插入记录一样,按顺序or按名称。

定义默认参数要牢记一点:默认参数必须指向不变对象!

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

def add_end(L=None):
if L is None:
L = []
L.append('END')
return L

2、可变参数:加一个*号。

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum 这里*指的是一个tuple调用
calc(1,2)
calc() 如果有tuple or list参数,如何调用: nums = [1, 2, 3] calc(*nums)

3、关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', 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'} >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'} >>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra

4、命名关键字参数:

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

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

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

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

5、参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意:

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

study Python3【3】的函数的更多相关文章

  1. python3 的 round 函数的 练习

    python3 的 round 函数感觉很别扭,其运算结果与习惯不相符.特记录下来: 代码 ''' python 3的 round 函数 是"四舍六入五成双"的 https://w ...

  2. python3内置函数大全(顺序排列)

    python3内置函数大全 内置函数 (1)abs(),   绝对值或复数的模 1 print(abs(-6))#>>>>6 (2)all() 接受一个迭代器,如果迭代器的所有 ...

  3. Python3.x:函数定义

    Python3.x:函数定义 1,函数定义: def 函数名称([参数1,参数2,参数3......]): 执行语句 2,实例一(不带参数和没返回值): def helloWorld(): print ...

  4. python3内置函数大全

    由于面试的时候有时候会问到python的几个基本内置函数,由于记不太清,就比较难受,于是呕心沥血总结了一下python3的基本内置函数 Github源码:        https://github. ...

  5. python3入门之函数

    相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...

  6. Python3内置函数、各数据类型(int/str/list/dict/set/tuple)的内置方法快速一览表

    Python3内置函数 https://www.runoob.com/python3/python3-built-in-functions.html int https://www.runoob.co ...

  7. 解决Python3下map函数的显示问题

    今天小编就为大家分享一篇解决Python3下map函数的显示问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧map函数是Python里面比较重要的函数,设计灵感来自于函数式编程.P ...

  8. 用python实现矩阵转置,python3 中zip()函数

    前几天群里有同学提出了一个问题:手头现在有个列表,列表里面两个元素,比如[1, 2],之后不断的添加新的列表,往原来相应位置添加.例如添加[3, 4]使原列表扩充为[[1, 3], [2, 4]],再 ...

  9. 08 . Python3高阶函数之迭代器、装饰器

    Python3高阶函数之迭代器.装饰器 列表生成式 推导式就是构建比较有规律的列表,生成器. 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里 ...

  10. python3内置函数详解

    内置函数 注:查看详细猛击这里 abs() 对传入参数取绝对值 bool() 对传入参数取布尔值, None, 0, "",[],{},() 这些参数传入bool后,返回False ...

随机推荐

  1. ClickHouse-5操作

    ClickHouse操作手册由以下主要部分组成: 安装要求 监控 故障排除 使用建议 更新程序 访问权限 数据备份 配置文件 配额 系统表 服务器配置参数 如何用ClickHouse测试你的硬件 设置 ...

  2. Html5移动应用性能优化笔记

    前景描述:最近一直在学习html5移动开发,找了很多资料,做了很多的页面.奈何作为一个程序猿,没有前端攻城狮那般专业,处处碰壁,想遍各种方法,经历各种尝试,最终的效果自己都能看醉.其中最大的问题就是 ...

  3. 将个人PC转变为高效的云电脑:理论、实践与优化

    本文分享自天翼云开发者社区<将个人PC转变为高效的云电脑:理论.实践与优化>,作者:不知不觉 在数字化时代的今天,我们越来越依赖互联网和计算机技术进行工作和生活.然而,传统的个人电脑(PC ...

  4. 将VSCode设置为中文(汉化)

    1.VSCode安装好后默认语言为英文,此汉化过程的VSCode版本为1.42.1,如下图所示: 2.下载安装完成后,打开VSCode,使用快捷键Ctrl+Shift+P,然后在出现的输入框中输入co ...

  5. Kali 安装并配置 Nessus

    Kali 安装并配置 Nessus 安装 Nessus 创建nessus文件夹 sudo mkdir /opt/nessus 下载 Nessus ( https://www.tenable.com/d ...

  6. Atcoder ABC329E Stamp 题解 [ 绿 ] [ 线性 dp ]

    Stamp:难点主要在 dp 转移的细节与分讨上,但通过改变状态设计可以大大简化分讨细节的题. 观察 首先要有一个观察:只要某一个前缀能被覆盖出来,那么无论它后面多出来多少,后面的字符串都可以帮他重新 ...

  7. Hetao P1178 冒险者 题解 [ 绿 ][ 最短路 ][ 线性 dp ]

    冒险者 题解 本蒟蒻采用的和大部分人解法不同,是根据当前标记值的总和跑最短路的一种解法. 思路 30min ,调代码 2h 的我太蒻了 首先观察题面可以发现本题求的是最少操作数,由于要求最小且有变化的 ...

  8. 如何配置 maven 编译插件的 JDK 版本

    普通maven项目配置编译器版本 参考maven官方文档 Setting the -source and -target of the Java Compiler maven有2种方法设置编译JDK版 ...

  9. babel-loader 如何工作? 什么是babel-loader插件? babel-loader插件可以干什么? 如何制作一个babel-loader插件?

    本文会介绍比较基本的编译知识和babel-loader运作原理 babel-loader 是什么? 作为老一派的打包工具, babel-loader 想必大家已经非常熟悉了.它长这样子 // webp ...

  10. 有分类无tag

    1 2