Python学习笔记3 函数_20170614

# 函数

  • 定义
def my_abs(x) : 
    if not isinstance(x, (int, float)) : 
         raise TypeError('bad operand type')
    if x>0 :
        return x;
    elif x == 0 :# 只是为了显示pass的作用,什么都不做。对于函数逻辑是不对的。
        pass # pass 是占位符,什么都不做。
    else :
        return -x
  • 加载函数

假如函数 my_abs 定义在文件 abstest.py 中,调用的加载方式为:

from abstest import my_abs # 导入my_abs()
  • 加载库
import math

def move(x, y, step, angle=0)
    nx = x+step*math.cos(angle)
    ny = y+step*math.sin(angle)
    return nx, ny # 按照 tuple 方式返回多个变量
  •  函数参数1 位置参数(最一般的参数)

见上面的例程,x、y、step

  • 函数参数2 默认参数

见上面的例程,angle = 0

  •  函数参数3 可变参数(类似tuple传入)(常用做法,调用更简单)
# 函数, number 是位置参数
def calc(numbers) :
    su = 0
    for n in numbers:
        su = su+n*n
    return su

# 调用
>>>calc([1,2,3])
>>>a = [1,2,3]
>>>calc(a) # 这里都是以list作为参数传入


# 函数,*number 是可变参数
def calc(*numbers) :
    su = 0
    for n in numbers:
        su = su+n*n
    return su
# 调用
>>>calc(1,2,3) # 这是tuple
>>>a = [1,2,3]
>>>calc(*a) # 
  •  函数参数4 命令关键字参数(对参数4中可传入的类型加以限制)
def person(name, age, *, city, gender) : 
    print(name, age, city, gender)

# 表示参数 city 和 gender 一定要传入
# 可以缺省
# 可以设置默认值
def person(name, age, *args, city='Beijing', gender) : 
    print(name, age, city, gender)

# 注意 * ,是 city, gender 别于位置参数的标志符。
  •  函数参数5 关键字参数(类似dict传入)
def person(name, age, **KeyWord) : 
    print('name : ', name, 'age : ', age, 'other : ', KeyWord)

# **KeyWord就是关键字参数
# 可以缺省调用
>>>persion('AA', 10)
name : AA age : 10 other : {}

# 传入参数,关键字参数就是一个 dict 
>>>person('AA', 10, city = 'Beijing', gender = 'M')
name : AA age : 10 other : {'city''Beijing', 'gender' : 'M'}

# 先设计dict,;2种调用方法
>>> extra = {'city' : 'Beijing', 'gender' : 'M'}
>>> person('AA', 10, **extra) 
 
>>> person('AA', 10, city=extra['city'], gender = extra['gender'])
  • 函数参数的顺序

函数的参数顺序必须如下:

位置参数(list或者tuple传入)、

  默认参数()、

    可变参数(*L)(list或者tuple传入)、

       命名关键字参数(*,d)(有限制的dict传入)、

          键字参数(**d)(dict传入)

原文地址:https://www.cnblogs.com/alexYuin/p/7006944.html