参考:函数参数

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. python的os模块命令

    https://www.cnblogs.com/weiyiming007/p/8493913.html

  2. POJ2318:TOYS(叉积判断点和线段的关系+二分)&&POJ2398Toy Storage

    题目:http://poj.org/problem?id=2318 题意: 给定一个如上的长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数.(其中这些线段 ...

  3. SQL Server 2008数据库手动提交的设置

    有时候我们需要对SQL Server 2008数据库手动提交的方法进行设置,使用Oracle的朋友会注意到Oracle中的手工提交的,如果修改错了数据还可以Rollback.但在SQL Server ...

  4. 1141 PAT Ranking of Institutions[难]

    1141 PAT Ranking of Institutions (25 分) After each PAT, the PAT Center will announce the ranking of ...

  5. python3 爬虫神器pyquery的使用实例之爬网站图片

    PyQuery 可让你用 jQuery 的语法来对 xml 进行操作,这和 jQuery 十分类似.如果利用 lxml,pyquery 对 xml 和 html 的处理将更快. 如果对 jQuery  ...

  6. Django-session中间件源码简单分析

    Django-session中间件源码简单分析 settings里有关中间件的配置 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddlew ...

  7. The Cheap KD 10 is my best shoe yet

    10 years of anything is fairly huge Cheap KD 10, but adding something as great as Flyknit causes it ...

  8. 002-启动spring boot应用

    一.idea启动. 1.在src目录里面找到启动类(包含主函数的类)DemoApplication,然后在该类里面右键,选择run DemoApplication.main,即spring boot应 ...

  9. kubernetes上安装MongoDB-3.6.5集群副本集方式

    一.安装部署: 想直接一步创建集群的小伙伴直接按以下步骤安装(再往后是记录自己出过的错): 1.生成docker镜像: docker build -t 144.202.127.156/library/ ...

  10. 264. Ugly Number II(丑数 剑指offer 34)

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...