参考:函数参数

Note

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

2.Python的函数支持默认参数。

eg.

#!/usr/bin/env python3

def power(x, n=2) :
i = 1
a = 1 while i <= n :
a = a * x
i = i + 1 return a

output:

>>> from function2 import power
>>> power(3)
9
>>> power(3, 3)
27
>>> power(3, 4)
81
>>> power(3, 1)
3

注意:

<1>.一是必选参数在前,默认参数在后,否则Python的解释器会报错。

比如,如果power函数这样子定义:

def power(x = 3, n)

那么这样调用函数时:power(2) 解释器无法判断传入的参数2是赋值给x还是n:若赋值给x,那么应该报参数数目不匹配的错误;若赋值给n,那么就应该计算3的平方。

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

eg.

def my_function(name, age,
prof = 'Student', city = 'FuZhou') : print(name, age, prof, city) return

output:

>>> from function2 import my_function
>>> my_function('Chen', 20)
Chen 20 Student FuZhou
>>>

默认参数降低了函数调用的难度,而一旦需要更复杂的调用时,又可以传递更多的参数来实现。无论是简单调用还是复杂调用,函数只需要定义一个。

3.可以不按顺序提供部分默认参数。

如,my_function函数定义时提供四个形参:name, age, prof, city。此时,我想传入三个参数,分别是名字、年龄、城市,职业使用默认参数,做法是:

my_function('Li', 20, city='Beijing')

输出:

>>> my_function('Li', 20, city='Beijing')
Li 20 Student Beijing

当无序提供默认参数时,需要指定提供默认参数的名字。

4.对于默认参数,最需要注意的地方在于,默认参数必须指向不变对象!

如:

def function3(L=[]) :

	L.append('EOF')

	return

function3函数指定了一个默认参数L,默认为空的list。

正常调用时,结果正确:

>>> from function2 import function3
>>> function3([1, 2, 3])
[1, 2, 3, 'EOF']
>>> function3([1, 2, 3, 'Hi'])
[1, 2, 3, 'Hi', 'EOF']
>>>

倘若我不传入任何参数进行调用:

>>> function3()
['EOF']
>>> function3()
['EOF', 'EOF']
>>> function3()
['EOF', 'EOF', 'EOF']
>>> function3()
['EOF', 'EOF', 'EOF', 'EOF']
>>>

每次调用期望得到的都是['EOF'],但是上面调用结果显示的却是不断往L中加入'EOF'。

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

不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。

我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

4.Python支持可变参数。即我们调用函数时传入的参数是可变的。

在函数定义时,必须确定参数个数,如果要做到传入参数可变,则需要使用list。

def function4(number) :

	res = 0

	for i in number :
res += i*i print(res) return

函数function4用于计算aa+bb+...+n*n。

在调用时,我们必须将参数封装为list:

>>> from function2 import function4
>>> function4([1, 2, 3])
14
>>>

在Python中,我们可以使用类似C语言指针的形式指定形参,将传入的不定数目的参数封装为一个tuple。

def function4(*number) :

	res = 0

	for i in number :
res += i*i print(res) return

调用时就无需对传入的参数进行封装了:

>>> from function2 import function4
>>> function4(1, 2, 3)
14

如果传入的参数是一个list的话,此时会报错:

>>> function4([1, 2, 3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/wasdns/Desktop/PythonLearn/function2.py", line 31, in function4
res += i*i
TypeError: can't multiply sequence by non-int of type 'list'

在调用时,我们可以在list的名字前面加上一个*,以多个参数的形式传入参数。

>>> function4(*[1, 2, 3])
14
>>> lista = [1, 2, 3]
>>> function4(*lista)
14

2017/1/30

Python学习札记(十二) Function3 函数参数一的更多相关文章

  1. Python学习日记(十二) 匿名函数

    匿名函数: 未解决一些简单的需求而设计的函数 语法: func = lambda x : x**2 func:函数名 lambda:类似def的关键字 x:参数 x**2:返回值表达式 适用内置函数: ...

  2. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  3. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  4. python学习第二十五天函数位置参数和关键词参数

    函数位置参数顾名思义就是按位置排序,按位置对应参数,位置一一对应,函数的关键词参数是不按照顺序来的,可以指定的参数传值.但是注意的是,位置参数必须在关键词参数之前. 1,函数位置参数 def good ...

  5. Python 学习 第十二篇:pandas

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,最常用的数据结构是:序列Series和数据框DataFrame,Series类似于numpy中的一维数组,类似于关 ...

  6. python学习笔记(十 二)、操作数据库

    每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...

  7. Python学习(十二) —— 面向对象

    一.初识面向对象 面向过程的核心是过程,流水线思维,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大地降低了写程序的复杂度,只需要顺着要执行的 ...

  8. Python学习札记(十) Function1 函数调用

    参考:调用函数 Note 1.Python内置了很多函数,我们可以直接对这些函数进行调用.Python官网:Built in Fuctions eg.调用abs函数(取绝对值函数): >> ...

  9. python学习(十二)模块

    怎么一下子就来学了模块? 其实学了判断.循环.函数等知识就可以开始下水写程序了,不用在意其他的细节,等你用到的时候再回过头去看,此所谓囫囵吞枣学习法. 为啥学模块? 有点用的.或者有点规模的程序都是要 ...

随机推荐

  1. oracle 归档空间满的解决办法

    问题现象: 通过命令提示符登陆数据库,一般提示“ora-03113:通信通道的文件结尾”错误,查看trace日志,可以看到详细信息.部分摘录如下(橙色部分给出了建议方案): Errors in fil ...

  2. MapReduce小文件优化与分区

    一.小文件优化 1.Mapper类 package com.css.combine; import java.io.IOException; import org.apache.hadoop.io.I ...

  3. 【MFC系列】MFC快速设置控件文本字体、大小、颜色、背景

    以静态文本为例,分享一下怎么修改文本字体.大小.颜色.背景等参数.其他文本.控件等可参照修改. 1.修改字体.大小 这个很简单,首先在Dlg类中声明一个CFont类型的成员变量: 然后在类的初始化函数 ...

  4. db-mysql-001- 语句备份表

    1.备份表 CREATE TABLE AAbak( SELECT * FROM AA ); 2.两个已存在表导数据 INSERT INTO AAbak(c1,c2) SELECT c1,c2 FROM ...

  5. RocketMQ Java 客户端实现

    本章介绍使用 Java 实现RocketMQ 的客户端. 以及各种消息的方式的实现. 本章实现了以下几种消息的实现方式: 一:普通消息 普通的消息分为三种: 1> 可靠的同步消息 可靠的同步传输 ...

  6. CXF框架介绍及Spring集成

    1.CXF框架概念介绍 Apache CXF 是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP.POST/HTTP.H ...

  7. oracle RMAN复制数据库

    列出创建副本数据库的目的 • 选择用于复制数据库的方法 • 使用RMAN 复制数据库 • 使用RMAN 备份复制数据库 • 基于正在运行的实例复制数据库   使用副本数据库 • 使用副本数据库可执行以 ...

  8. 美化MFC 之调整静态文本的颜色 字体。 用于添加公司标题 联系方式 口号等数据

    很多人都觉得自己的程序的界面不那么美观,往往VC默认产生的对话框比较单调, 因此很多人往往找到很多其它的控件对对话框进行美化修饰, 例如给静态控件设置字体,设置背景颜色等等, 其实这些完全可以由VC自 ...

  9. SCP命令只能单项拷贝,另一个方向“RSA host key for 172.16.103.176 has changed and you have requested strict checki Host key verification failed. lost connection”问题

    [dinghuaneng@95 move_data]$ scp * dinghuaneng@172.16.103.176:/home/dinghuaneng@@@@@@@@@@@@@@@@@@@@@@ ...

  10. 什么是Socket?简单点,通俗易懂的?

    网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装 ...