美文网首页
python函数学习

python函数学习

作者: zzj丶 | 来源:发表于2017-08-18 16:27 被阅读8次

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数。可以直接从Python的官方网站查看文档:

http://docs.python.org/3/library/functions.html#abs

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”

a = abs#变量a指向了abs函数
print(a(-3))

十六进制转换

n1 = 255
print(hex(n1))

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

def my_abs(x):
    if x >=0:
        return x
    else:
        return -x
print(my_abs(6))

空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():
pass

pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

pass还可以用在其他语句里,比如:

if age >= 18:
pass

缺少了pass,代码运行就会有语法错误

函数返回多个值:

import math#导入math包
def move(x,y,step,angele = 0):
    nx = x + step * math.cos(angele)
    ny = y - step * math.sin(angele)
    return nx , ny

print(move(25,26,45))
定义函数时,需要确定函数名和参数个数;

如果有必要,可以先对参数的数据类型做检查;

函数体内部可以用return随时返回函数结果;

函数执行完毕也没有return语句时,自动return None。

函数可以同时返回多个值,但其实就是一个tuple

设置默认参数时,有几点要注意:

一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);
二是如何设置默认参数。
当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
使用默认参数有什么好处?最大的好处是能降低调用函数的难度。

默认函数参数的使用

def setInfo(name,sex,age = '9',city = '济南'):
print('name:',name)
print('sex:',sex)
print('age:',age)
print('city:',city)

print(setInfo('java','好'))
print(setInfo('ptyhon','见'))

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例

def person(name,age,**er):
print('name',name,'age',age,'other',er)

print(person('java',16,city = '济南',sex = 'nan'))

命名关键字参数

和关键字参数kw不同,命名关键字参数需要一个特殊分隔符后面的参数被视为命名关键字参数。

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个作为特殊分隔符。如果缺少,Python解释器将无法识别位置参数和命名关键字参数:

参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

def f1(a,b,c = '3',args,*kw):
print('a = ',a,'b = ',b,'c = ' ,c,'args = ' ,args,'kw = ' , kw)

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

#计算1*2*3*4*....*n的值
def fact(n):
    if n == 1:
        return 1
    return n * fact(n-1)

print(fact(100))

使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。

相关文章

网友评论

      本文标题:python函数学习

      本文链接:https://www.haomeiwen.com/subject/bzrgrxtx.html