来和我一起了解python的函数吧

158 阅读2分钟

1 函数

  • 1、函数定义
  • 2、函数调用
  • 3、无参函数
  • 4、一个返回值函数
  • 5、多个返回值函数
  • 6、关键字参数
  • 7、默认值参数
  • 8、可变参数

函数是定义好的一段可以重复使用的代码,在有需要的时候调用。之前我们使用过的print()就是内置函数,我们也可以自定义函数,来提高代码的复用性。

1.1 函数定义

  • 函数定义

    • def 关键字
    • 函数名
    • 形式参数

1.2 函数调用

  • 函数调用

    • 通过函数名调用
    • 实际参数

1.3 无参函数

  • 无参数的函数

    • 定义
    • 调用

代码例子

def star():
    """
    该函数的功能是打印小星星
    """
    row = 1
    while row <= 5:
        print("*" * row)
        row += 1
# 调用:
star()
print(star.__doc__)  # 打印函数star的文档注释内容

1.4 一个返回值函数

  • 一个返回值函数

    • 定义
    • 调用

代码例子

def add(num1, num2):
    """
    :param num1: 数字1
    :param num2: 数字2
    :return: 两个数字之和
    """
    return num1 + num2
# 调用
a = add(1, 29) 

1.5 多个返回值函数

  • 多个返回值函数

    • 定义
    • 调用

代码例子

def max_and_min(nums):
    max_num = nums[0]  # 最大值
    min_num = nums[0]  # 最小值
    for i in nums:
        if i > max_num:
            max_num = i
        if i < min_num:
            min_num = i
    return min_num, max_num
# 调用
result = max_and_min([1, 2, 5, 10, -90, 100]  # (-90, 100) 

代码练习

  • 1.函数的定义
def 函数名([参数名1,参数名2,....]):
    函数封装的语句块

注意:
1.函数名符合标识符定义的规则,函数名后面要写上(),后面写上冒号(:)
2.函数定义时,()中的参数称之为形式参数
3.函数封装的语句块另起一行写,缩进4空格,且要对齐
4.[]不是函数定于语法中的一部分,仅表示是可选的

  • 2.函数的调用
函数名([参数1,参数2,....])

注意:
1.函数只有调用过才会执行代码
2.函数调用时,()的参数称之为实际参数(定义并赋值过的变量或者数据)

  • 3.无参数的函数
def star():
    row=1
    while row<=5:
        print("*"*row)
        row+=1

#调用定义的函数
star() 
star()
  • 4.有返回值的函数
def add(num1,num2):
    """
    num1:第一个数
    num2:第二个数
    返回值,两个数的和
    """
    return num1+num2 

#调用
n1=20
n2=40
add(n1,n2)   
#保存函数调用后返回的结果
n3=add(n1,n2) 
print(n3)  
#直接打印输出函数调用后返回的值
print(add(30,5))    

print(star())    #返回None 表示空
print(type(None)) 
# print(None+1)    #不能当作数字进行运算
# print(None+"123")  #不能当作字符串进行运算  
print(None and True) 
  • 5.返回多个值的函数
def max_and_min(mystr):
    c1 = max(mystr)
    c2 = min(mystr) 
    return c1,c2  

#调用
print(max_and_min("hfddshjkl")) 
# print(c1,c2)   #c1,c2这里看不到(超出了c1,c2作用域) 

# def show():
#     print(n1,n2) 

# show() 

c1,c2 = max_and_min("hjkdsa")
print(c1,c2) 

练习

# def is_palindrome(string):
#     """
#     判断字符串string是回文
#     :param string:
#     :return:
#     """
#     middle = len(string)//2
#     i=0
#     j=-1
#     n=0
#     while n<=middle:
#         if string[i+n]==string[j-n]:
#             n+=1
#         else:
#             mystr=string+"不是回文"
#             break
#     else:
#         mystr=string+"是回文"
#     return mystr  

def is_palindrome(string):
    """
    判断字符串string是回文
    :param string:
    :return:
    """
    middle = len(string)//2
    i=0
    j=-1
    while i<=middle:
        if string[i]==string[j-i]:
            i+=1
        else:
            mystr=string+"不是回文"
            break
    else:
        mystr=string+"是回文"
    return mystr  


print(is_palindrome('abcddcba'))
print(is_palindrome('pythonohtyp'))
print(is_palindrome('bookkob'))

1.6 关键字参数

  • 关键字参数

    • 定义
    • 调用

代码例子

def dog(keeper, name, age):
    print("%s养了一条狗,它的名字叫做%s,它今年%d岁了" % (keeper, name, age))

# 调用:
dog("小明", "考拉", 2)  # 按照参数位置调用
dog("小明", age=3, name="考拉")  # 按照参数关键字传入参数

# 注意:调用函数时,关键字参数一定要放在位置参数的后面,否则会报错

1.7 默认值参数

  • 默认值参数

    • 定义
    • 调用

代码例子

def person(name, age=18, sex="男"):
    print("name =", name)
    print("age =", age)
    print("sex =", sex)
# 上面的方法在定义时,包含了默认值
# 调用
person("小明", 20)

1.8 可变参数

  • 可变参数

    • 定义
    • 调用

可变参数使用*args表示,传入的参数个数是可变的,函数中以元组接收多个参数。如果该参数不是最后一个参数,之后传入的参数必须以关键字参数形式传入。

代码例子

# *args 可变参数
def test(*args, a):
    print(args)
test(1, 2, 3, 5, a=10)

代码练习2

  • 函数定义
  • 没有默认值参数的函数
def dog(keeper,name,age):
    print("主人:"+keeper)
    print("名字:"+name)
    print("年龄:"+str(age))

#位置参数
dog("小红","哈士奇",2) 

#关键字参数
dog(age=2,keeper="小红",name="哈士奇")
#如果既有位置参数,又有关键字参数,注意位置参数必须在前面,关键字参数后面不允许出现位置参数
dog("小红",age=2,name="吉娃娃") 
dog(keeper="小红",name="吉娃娃",age=2)  

#没有默认值参数的函数调用时必须提供实际参数
# dog(keeper="小明")    #报错


有默认值参数的函数
def person(name,sex='男',age=20):
    print("名字:"+name)
    print("性别:"+sex)
    print("年龄:"+str(age)) 

person("张三") 

person("李四",'女',22) 


#可变参数  - 参数的数量可变
def add(*num):
    print(num)  

add(2)
add(2,3)
add(2,3,4)  
add()