PYthon3学习笔记04-函数

Python内置的 hex() 函数把一个整数转换成十六进制表示的字符串;

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块儿中编写函数体,函数的返回值用return语句返回。
例如:
def my_abs(x):
if x>=0:
return x
else :
returun -x
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能够运行起来。
pass还可以用在其他语句里,比如:
if age>=18:
pass
缺少了pass,代码运行就会有语法错误。

对参数类型做检查,只允许整数和浮点数类型的参数,可以用内置函数isinstance()实现:
def my_abs(x):
if not isinstance(x,(int,float)):
raise TypeError(‘bad operand type’)
if x>=0:
return x
else:
return -x

print(my_abs(-4))

Python的函数返回多个值其实就是返回一个tuple,tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋值给对应的值。

#定义一个函数,求一元二次方程的解
import math
def quadratic(a,b,c):
if b2-4ac>=0:
x1=(-b+math.sqrt(b
2-4ac))/(2a)
x2=(-b-math.sqrt(b**2-4
ac))/(2a)
return (x1,x2)
else:
return “无解”
print(quadratic(1,3,5))

设置默认参数时,有几点要注意:
一:必选参数在前,默认参数在后,否则Python的解释器会报错;
二:当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

默认参数很有用,但使用不当,也会掉进坑里。默认参数有个最大的坑,演示如下:
先定义一个函数,传入一个list,添加一个END再返回:
def add_end(L=[]):
L.append(‘END’)
return L
print(add_end([1,2,3]))
当你正常调用时,结果似乎不错。
print(add_end())
当你使用默认参数调用时,一开始也是对的。
但是,再次调用add_end()时,结果就不对了:
def add_end(L=[]):
L.append(‘END’)
return L
print(add_end())
print(add_end())
结果:
[‘END’]
[‘END’, ‘END’]
很多初学者很疑惑,默认参数时【】,但是函数似乎每次都记住了上次添加了‘END’后的list。
原因解释如下:
Python函数再定义的时候,默认参数L的值就被计算出来了,即【】,因为默认参数L也是一个变量,它指向对象【】,每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再时函数定义时的【】了。
所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
要修改上面的例子,我们可以用None这个不变对象来实现:
def add_end(L=None):
if L is None:
L=[]
L.append(‘END’)
return L
print(add_end())
print(add_end())
运行结果:
[‘END’]
[‘END’]
为什么要设计str、None这样的不变对象呢,因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

你可能感兴趣的:(python基础)