Python函数Day3

作者: 墨马 | 来源:发表于2019-01-05 00:20 被阅读4次

基本上所有的高级语言都支持函数,Python也不例外,而且其内部也内置了很多函数,可以直接调用。

调用函数

首先要知道函数的名称和参数,如果参数个数错误会报错(TypeError)

abs(12,34)#取绝对值函数

Traceback (most recent call last):
  File "E:/phyton/pythoncode/print.py", line 1, in <module>
    abs(12,34)
TypeError: abs() takes exactly one argument (2 given)

函数的数据类型不被接受也会报错

abs("a")

Traceback (most recent call last):
  File "E:/phyton/pythoncode/print.py", line 1, in <module>
    abs("a")
TypeError: bad operand type for abs(): 'str'

函数调用出错最方便快捷的解决方式就是看错误信息
可以把函数名赋值给一个变量相当于给函数起了一个别名

a = abs
a(-1)
1

定义函数

定义函数使用def语句,依次是函数名,括号,括号中写参数,冒号,return语句
执行到return,函数执行完毕,并返回结果,没有return语句执行完函数返回None,return None可以简写为return

def my_abs(x):
  if x >= 0:
    return x
  else:
    return -x;
my_abs(-9)
9

定义空函数,使用pass语句,其什么也不做,起占位作用,如果没有pass则会报错

def nop ():
SyntaxError: unexpected EOF while parsing
def nop ():
  pass
#不报错

参数检查Python解释器可以自动检查出参数个数不同,却无法检查参数的类型不对。我们可以使用内置函数isinstance()实现

def my_abs(x):
  if not isinstance (x,(int,float)):
    raise TypeError('bad operand type')
  if x >=0:
    return x
  else:
   return -x;
my_abs("a");
Traceback (most recent call last):
  File "E:/phyton/pythoncode/print.py", line 8, in <module>
    my_abs("a")
  File "E:/phyton/pythoncode/print.py", line 3, in my_abs
    raise TypeError('bad operand type')
TypeError: bad operand type

返回多个函数,实际上是返回一个tuple,而多个变量同时接受一个tuple则按位置赋给对应的值

def move(x,y,spend):
  nx = x + spend
  ny = y + spend
  return nx,ny 
x,y = move(10,10,6)
print(x,y)
16 16
r = move(10,10,6)
print(r)
(16,16)

函数的参数

Python函数定义非常简单,灵活度却非常大,除了必选参数,还有默认参数,可变参数和关键字参数

默认参数
#默认参数,计算x的n次方,默认是平方
def power(x,n=2):
  s=1;
  while n > 0:
    n = n-1
    s = s*x
  return s
  • 写参数时,变动大多的参数写在前面,变动小的写在后面,必选参数写在前面,默认参数写在后面
  • 函数有多个默认参数,可以根据参数顺序填写默认参数,也可以加参数名填写默认参数

默认参数使用起来比较简便,但是也存在问题如:

def add_end(L=[]):
  L.append("end");
  return L
#初次调用
add _end();
['end']
#再次调用
add_end();
['end','end']

原因:Python在定义函数的时候,默认参数L就被计算出来了,既[],因为默认参数也是一个变量,指向对象[],如果调用该函数,改变了[]的内容,下次调用该函数是,默认参数的内容就变了,所以默认参数一定要指向不变对象。
解决方法:

def add_end(L=None):
  if L is None:
    L=[]
  L.append('end')
  return L

不变对象一旦创建,对象内部的数据就不能修改,这样就减少了,由于数据修改产生的错误,如果可以,尽量把对象设计成不变对象。

可变参数

传入的参数可以是0到n任意个,这些参数在函数调用时自动组装成一个tuple。

#可变参数
def calc(*numbers):
  sum=0;
  for n in numbers
    sum = sum+n;
  return sum
#list或tuple变成可变参数传入
nums = [1,2,3]
calc(*nums)
6 
关键字参数

允许传入0到n个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict

def person (name,age,**kw):
  print('name:',name,'age:',age,'other:',kw)
person('ice',20,city='BeiJing')
name:ice age:20 other:{'city':'BeiJing'}
#传入dict
extra = {'city':'Beijing','job':'teacher'}
person('ice',20,**extra)
name:ice age:20 other:{'city':'BeiJing','job':'teacher'}
#kw是extra的一份拷贝,对其改变不影响extra

应用场景:在用户注册是,账号,密码为必填项,而其他信息可以选填这是就用到了关键字参数。

名命关键字参数

用于限制关键字参数的名字

#用*将位置参数和命名关键字参数分隔开
person(name,age,*,city,job):
#如果含有可变参数,这不用*分割
person(name,age,*args,city,job)
命名关键字必须传入参数名,否则报错
person('ice',20,city = 'beijing',job = 'teacher')

递归函数

#计算阶乘
def fact(n):
  if n = 1:
    return 1
  return n * fact(n-1)
  • 优点逻辑简单清晰
  • 缺点在调用中使用栈(stack),过深调用会出现栈溢出现象

相关文章

  • Python函数Day3

    基本上所有的高级语言都支持函数,Python也不例外,而且其内部也内置了很多函数,可以直接调用。 调用函数 首先要...

  • 学习小组Day6-如澜

    关键技能-table合并 dplyr其他函数在day3中已记录 使用dpyr函数取代excel的vlookup函数...

  • Python - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • Python函数式介绍一 - 高阶函数

    Python函数式介绍一 - 高阶函数Python函数式介绍二 - 链式调用 最近为了给朋友推广Python函数式...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Python基础学习day3|函数

    函数 函数是带名字的代码块,用于完成具体的工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项...

  • Python学习笔记1

    Python注释 Python变量 Python运算符 Python输入输出 输入函数 输出函数(3.x) ...

  • Python:内置函数

    python的内置函数,匿名函数 内置函数 内置函数就是python给你提供的,拿来直接用的函数,比如print,...

  • 二级Python----Python的内置函数及标准库(DAY

    Python的内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 python的内置函数(68个) Py...

  • python3 range() 函数和 xrange() 函数

    python3 range 函数 python3 取消了 xrange() 函数,并且和 range() 函数合并...

网友评论

    本文标题:Python函数Day3

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