Python笔记2(函数)

2019-06-28  本文已影响0人  Demon_半夏

一、调用函数

二、定义函数

1)、语法

def 函数名(参数列表):
函数体

举个栗子

# 计算面积函数
def area(width, height):
    return width * height
 
def print_welcome(name):
    print("Welcome", name)
 
print_welcome("Runoob")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))

Welcome Runoob
width = 4  height = 5  area = 20

2)、空函数

def x():
pass

3)、返回多个值

Python的函数返回多值其实就是返回一个tuple

三、函数的参数

参数分类

1)、普通参数

def 函数名(参数1, 参数2,....):
  函数体
# 调用
 函数名(value1, value2,.......)       # 调用的时候,具体值参考的是位置,按位置赋值

2)、默认参数

def  func_name(p1=v1, p2=v2..........):
  func_block

#调用1
func_name()

# 调用2
value1= 100
value2=200
func_name(value1,value2)
# 默认参数示例
# 报名函数,需要知道学生性别
# 学习python的学生基本都是男生,所以,报名的时候如果没有特别指定,我们任务是男生
def reg(name, age, gender="male"):
    if gender == "male":
        print("{0} is {1}, and he is a good student".format(name, age))
    else:
        print("{0} is {1}, and she is a good student".format(name, age))

# 调用默认参数函数案例1
reg("mingyue", 21)
reg("xiaojing", 23, "female")


mingyue is 21, and he is a good student
xiaojing is 23, and she is a good student

3)、关键字参数

语法
def func(p1=v1, p2=v2.....):
  func_body
调用函数:
func(p1=value1, p2=value2.......)
def stu(name, age, addr):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))
        
n = "jingjing"
a = 18
addr = "我家"

# 普通参数,只按照位置传递,容易出错
stu(a, n, addr)

def stu_key(name="No name", age=0, addr="No addr"):
    print("I am a student")
    print("我叫 {0}, 我今年 {1}岁了, 我住{2}".format(name, age, addr))
     
n = "jingjing"
a = 18
addr = "我家"

# 普通参数,只按照位置传递,容易出错
stu_key(age=a, name=n, addr=addr)


I am a student
我叫 18, 我今年 jingjing岁了, 我住我家
I am a student
我叫 jingjing, 我今年 18岁了, 我住我家

4)、收集参数

语法
  def func(*args):
      func_body
      按照list使用方式访问args得到传入的参数

  调用:
  func(p1, p2, p3, .....)
# 收集参数代码
# 函数模拟一个学生进行自我介绍,但具体内容不清楚
# args把他看做一个list
def stu( *args):
    print("Hello 大家好,我自我介绍以下,简答说两句:")
    # type函数作用是检测变量的类型
    print(type(args))
    for item in args:
        print(item)

stu("liuying", 18, "北京大通州区", "wangxiaojing", "single")
stu("周大神")


Hello 大家好,我自我介绍以下,简答说两句:
<class 'tuple'>
liuying
18
北京大通州区
wangxiaojing
single
Hello 大家好,我自我介绍以下,简答说两句:
<class 'tuple'>
周大神
# 收集参数案例
# 说明收集参数可以不带任何实参调用,此时收集参数为空tuple
stu()

Hello 大家好,我自我介绍以下,简答说两句:
<class 'tuple'>
# 如果使用关键字参数格式调用,会出现问题
stu(name="liuying")


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-b698f7b62960> in <module>()
      1 # 如果使用关键字参数格式调用,会出现问题
----> 2 stu(name="liuying")

TypeError: stu() got an unexpected keyword argument 'name'
关键字收集参数
  def func( **kwargs):
      func_body

  # 调用:
  func(p1=v1, p2=v2, p3=v3........)
# 收集参数案例
# 自我介绍
# 调用的时候需要使用关键字参数调用
def stu( **kwargs):
    # 在函数体内对于kwargs的使用不用带星号
    print("Hello 大家好,我先自我介绍一下:")
    print(type(kwargs))
    # 对于字典的访问,python2 和python3有区别
    for k,v in kwargs.items():
        print(k, "---", v)
    
stu(name="liuying",  age=19, addr="北京大通州区", lover="王晓静", work="Teacher")
print("*" * 50)
stu(name="周大神")


Hello 大家好,我先自我介绍一下:
<class 'dict'>
name --- liuying
age --- 19
addr --- 北京大通州区
lover --- 王晓静
work --- Teacher
**************************************************
Hello 大家好,我先自我介绍一下:
<class 'dict'>
name --- 周大神
# 收集参数可以为空案例
stu()

Hello 大家好,我先自我介绍一下:
<class 'dict'>
收集参数混合调用的顺序问题
收集参数的解包问题
dict类型收集参数一样可以解包,但是

5)、返回值

四、递归函数

上一篇 下一篇

猜你喜欢

热点阅读