您的位置:首页 > 编程语言 > Python开发

python[函数]学习记录

2017-11-05 17:20 423 查看

11-05

局部变量

变量的作用域是它被定义的块,从定义它们名字的定义点开始。

x=50
def func(x):
print('x is',x)
x=2
print('Changed local x to',x)
func(x)
print('x is still',x)


输出的结果为:

x is 50

Changed local x to 2

x is still 50

它是如何工作的:

调用函数时,第一个print,x接收到的是函数声明之上的主代码模块中的值

第二个print,在函数内,x被赋予值2,所以打印出来2。

函数之后,第三个print,展示的仍然是主代码模块中的值,不受函数中x值的变化的影响。

global语句

x=50
def func():
global x
print('x is',x)
x=2
print('Changed global x to',x)
func()
print('Value of x is',x)


输出的结果为:

x is 50

Changed global x to 2

Value of x is 2

它是如何工作的:

可以看到,跟上个运行结果的不同就是,最后在主模块中调用的print得出的x,竟然收到了函数的影响。所以global的作用就是把变量变为全局变量,这就是跟local区别的地方。

默认参数值

有时候我们需要为一些方法的参数提供默认值并让它可选,以避免用户不想为它们提供值的情况。

可以定义函数时,采用赋值运算符
=
来为参数提供默认值。

要注意的是默认参数值应该是常数,确切来说应该是不可变的,以后会解释。

#默认参数值
def say(message,times=1):
print(message*times)
say('hello')
say('world',5)


运送结果是:

hello

worldworldworldworldworld

注意,只有那些位于参数列表末尾的参数才能被赋予参数默认值。

这是因为值是按照参数所处的位置依次分配的。系统会搞不清楚哪个值分配给哪个参数。

关键字参数

如果一个函数有很多参数,又希望只对其中的一些进行指定,可以通过命名它们来给这些参数赋值,这就是
关键字参数
(Keywords Arguments),我们使用命名而非位置来指定函数中的参数。

这样做有两个好处:

不再需要考虑参数顺序,函数使用更加容易

可以对那些我们希望赋予的参数赋值,只要其他参数有默认参数值。

def func(a,b=5,c=10):
print('a is',a,'b is b',b,'c is',c)
func(3,7)
func(25,c=24)
func(c=50,a=100)


运行结果:

a is 3 b is b 7 c is 10

a is 25 b is b 5 c is 24

a is 100 b is b 5 c is 50

看,怎么样,是不是灵活了很多,方便了很多。

可变参数

有时想要定义的函数里面有任意数量的变量,也就是参数数量是可变的,这时可以使用*来实现。

def total(a=5,*numbers,**phonebook):
print('a',a)

#遍历元组中的所有项目
for single_item in numbers:
print('single_item',single_item)

#遍历字典中的所有项目
for first_part,second_part in phonebook.items():
print(first_part,second_part)

print(total(10,1,2,3,jack=123,lucy=345,jim=567))


得出的结果:

a 10

single_item 1

single_item 2

single_item 3

jack 123

lucy 345

jim 567

None

它是如何工作的:

当你声明一个诸如
*param
的星号参数时,从此开始直到结束的所有位置参数(Position Arguments)都被收集到一个名为‘param’的元组(tuple)中。

当你声明一个诸如
**param
的双星号参数时,从此开始直至结束的所有关键词参数都将被收集到一个名为‘param’的字典(Dictionary)中。

return语句

retrun
语句用于从函数中返回,也就是中断函数。我们也可以选择在中断函数时,从函数返回一个值。

def maximum(x,y):
if x>y:
return x
elif x==y:
return "The numbers are equal"
else:
return y

print(maximum(2,9))


运行结果:

9

要注意,
return
语句没有搭配任何一个值,则代表着返回
None
None
在python这种是一个特殊类型,表示虚无。

每一个函数在末尾都隐含了一句
return None
,除非你自己写了retrun语句,

def some_function():
pass
print(some_function())


得出的结果就是:None

python中的
pass
用来指示一个没有内容的语句块。

DocStrings

python有个甚是优美的功能称作文档字符串(Docmentation Strings),它能让你更好记录程序,更加易于理解。当程序运行时,我们甚至可以通过一个函数来获取文档。

def print_max(x,y):
'''打印两个数值中的最大数。

这两个数都应该是整数。 '''

x=int(x)
y=int(y)
if x>y:
print(x,'is maximum'<
4000
/span>)
else:
print(y,'is maximum')

print_max(3,5)

print(print_max.__doc__)

print(help(print_max))


运行结果:

5 is maximum
打印两个数值中的最大数。

这两个数都应该是整数。
Help on function print_max in module __main__:

print_max(x, y)
打印两个数值中的最大数。

这两个数都应该是整数。

None


DocStrings就类似一个帮助文档,把注释按照规定的格式写好后。以后方便自己检索,也方便别人查看。

该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束。 第二行为空行,后跟的第三行开始是任何详细的解释说明。

在此强烈建议你在你所有重要功 能的所有文档字符串中都遵循这一约定。

自动化工具可以以这种方式检索你的程序中的文档。因此,我强烈推荐你为你编写的所有重

要的函数配以文档字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 python