Python学习系列 - 函数学习(二)

今天开始函数相关学习。

1 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

1.1 定义函数

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

格式如下:

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

1.2 调用函数

1.2.1 调用内置函数

这里引用一下他人写的:内置函数
举一个例子:

# abs() 函数返回数字的绝对值。
import math 
print('abs(45)的值:',abs(45)) 
print('abs(-45)的值:',abs(-45)) 
print('abs(45+23)的值:',abs(45+23)) 
print('abs(math.pi)的值:',abs(math.pi)) 
运行结果:
abs(45)的值: 45
abs(-45)的值: 45
abs(45+23)的值: 68
abs(math.pi)的值: 3.141592653589793

1.2.2 调用自己写的函数

我们这里先写一个函数,然后再调用它:

# 计算方形面积函数  
def  area(width, height): 
    return  width * height
# 调用该函数
w = 20
h = 50
print("width =", w, " height =", h, " area =", area(w, h))
运行结果:
1000

1.2.3 空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():
    pass

实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

1.3 函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。

1.3.1 位置参数

我们先写一个计算x的n次方的函数:

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

对于power(x, n)函数,参数xn就是位置参数。

# 调用power函数的时候我们必须要按照顺序传递x和n两个参数
a = power(5, 3)
print(a)
运行结果:
125

1.3.2 默认参数

我们可能经常使用的是计算x的平方,偶尔使用x的n次方。这时我们就需要使用默认参数了:

# 这样如果我们不传n的话,n的默认值就是2,也就是计算x的平方值。
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

我们来测试一下:

a = power(5)
print(a)
b = power(5, 3)
print(b)
运行结果:
25
125

1.3.3 不定长参数

加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。

def printinfo(arg1, *vartuple):  
    """打印任何传入的参数"""  
    print("输出: ")  
    print(arg1)  
    print(vartuple)  
  
  
# 调用printinfo 函数  
printinfo(70, 60, 50)
运行结果:
输出: 
70
(60, 50)

加了两个星号 ** 的参数会以字典的形式导入。

def printinfo(arg1, \*\*vardict):  
    """打印任何传入的参数"""  
    print("输出: ")  
    print(arg1)  
    print(vardict)  
  
  
# 调用printinfo 函数  
printinfo(1, a=2, b=3)
运行结果:
输出: 
1
{'a': 2, 'b': 3}

1.4 匿名函数

python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
sum = lambda  arg1, arg2: arg1 + arg2  
# 调用sum函数  
print  ("相加后的值为 : ", sum(  10, 20  ))  
print  ("相加后的值为 : ", sum(  20, 20  ))
运行结果:
相加后的值为  :  30  
相加后的值为  :  40

部分内容参考:
https://www.liaoxuefeng.com/w...

你可能感兴趣的