day5 函数和参数

函数就是最基本的一种代码抽象的方式

定义一个函数使用def语句

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

定义一个什么事也不做的空函数(可以用来作为占位符)

def nop():

  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

定义函数时,需要确定函数名和参数个数;
如果有必要,可以先对参数的数据类型做检查;
函数体内部可以用 return 随时返回函数结果;
函数执行完毕也没有 return 语句时,自动 return None。
函数可以同时返回多个值,但其实就是一个 tuple。

位置参数

计算平方,立方,4次方。。。。

def power(x, n):
    s = 1
    while n > 0:
          n = n - 1
          s = s * x
     return s
a = power(5, 2)
print(a)

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

三默认参数必须指向不变对象

默认参数

def enroll(name, gender, age=6, city='Beijing'):
   print('name:', name)
   print('gender:', gender)
   print('age:', age)
   print('city:', city)
>>> enroll('Sarah', 'F')
name: Sarah
gender: F
age: 6
city: Beijing

调用的时候,既可以按顺序提供默认参数,比如调
用 enroll('Bob', 'M', 7)

可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,
需要把参数名写上。比如调用 enroll('Adam', 'M', city='Tianjin')

可变参数

在函数内部自动组装成list或tuple

给定一组数字 a,b,c……,请计算 a的平方加b的平方加c的平方.....

方法1 list或tuple

def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

调用时,需先组装出list或tuple

>>>calc([1, 2, 3])

14

>>>calc((1, 3, 5, 7))

84

方法二 可变参数

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7)
84

已经有一个 list 或者 tuple,要调用一个可变参数

>>> nums = [1, 2, 3]
>>> calc(*nums)
14

关键字参数

充许传入0个或任意个含参数名的参数,在函数内部自动组装成dict

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

>>> person('Michael', 30)
name: Michael age: 30 other: {}
也可以传入任意个数的关键字参
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

和可变参数类似,也可以先组装出一个 dict,然后,把该 dict 转换为关
键字参数传进去:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, city=extra['city'], job=extra['job'])
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
当然,上面复杂的调用可以用简化的写法:
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

注意kw获得的dict是extra的拷贝,kw的改动不会影响到函数外的extra

命名关键字参数

限制关键字参数的名字,就可以用命名关键字参数例如,只接
收 city 和 job 作为关键字参数
def person(name, age, *, city, job):
    print(name, age, city, job)
和关键字参数**kw 不同,命名关键字参数需要一个特殊分隔符*,*后面
的参数被视为命名关键字参数,命名关键字参数必须传入参数名。

命名关键字参数可以有缺省值,从而简化调用:
def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)
由于命名关键字参数 city 具有默认值,调用时,可不传入 city 参数:
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer

参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。

 

 

转载于:https://www.cnblogs.com/wwchihiro/p/10216111.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值