博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习札记(十二) Function3 函数参数一
阅读量:5108 次
发布时间:2019-06-13

本文共 2768 字,大约阅读时间需要 9 分钟。

参考:

Note

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

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

eg.

#!/usr/bin/env python3def 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 "
", line 1, in
File "/Users/wasdns/Desktop/PythonLearn/function2.py", line 31, in function4 res += i*iTypeError: 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

转载于:https://www.cnblogs.com/qq952693358/p/6358150.html

你可能感兴趣的文章
jQuery插件——Validation Plugin表单验证
查看>>
Web前端学习笔记:Bootstrap框架
查看>>
restrict和volatile的作用
查看>>
c# 枚举基础有[flags]和没有的的区别
查看>>
static关键字——读《嵌入式c语言进阶之道》整理
查看>>
html5 的localstorage
查看>>
项目日志的管理和应用 log4js-Node.js中的日志管理模块使用与封装
查看>>
linux通过端口号查找程序执行路径
查看>>
Java日期
查看>>
laravel vendor目录的安装
查看>>
windows service承载的web api宿主搭建(Microsoft.Owin+service)
查看>>
PAT 1009. 说反话 (20)
查看>>
动态改变EnterpriseLibary数据库访问链接字符串的三种方法
查看>>
子模块的设计与分析
查看>>
(Mark) (Ubuntu)Ubuntu 12.04 LTS 通过ppa安装Fcitx 搜狗输入法 (Linux) (输入法)
查看>>
html5+canvas
查看>>
3月30日
查看>>
[转] Android root 原理
查看>>
知识点集锦
查看>>
Remove Duplicates from Sorted List I&&II
查看>>