python小白之第二节-有关函数的那些事
Reference: Kaggle Notebook Functions and Getting Help! Click me!
上一节有提到过print()函数,但是其实除此之外,python还有好多好多的函数,而且还支持自定义函数。
今天就学一下如何调用已知函数又或者自定义函数
首先,在正式学习之前,我们先看看如何向python寻求帮助(Getting Help);
先放一个例子:
help(round)
输出:
1. help()函数(Getting Help)
help()的函数可以说是python函数中最重要的一位成员了。只需要记住help()函数如何使用,就等于记住了千千万万的python函数如何使用了。
由上述例子可以看出:
1、round()函数的调用格式:round(number[, ndigits]);这表明round()函数自带一个参数(argument),名为number;另外还可以选择性指定另一个参数,此参数主要用于给定精确度,此处称为ndigits。注意:参数ndigits并非必须的,默认为0。
“- > number” 代表的是返回的是数值。
2、除了介绍调用格式,python还提供了一些简单的介绍。round()函数主要用于将数字四舍五入,参数number代表需要判定四舍五入的数字,参数ndigits代表的是精确度(默认为0);给个例子大家就会懂了
round(4.6)
输出:
5
round(5.9887,2)
输出:
5.99
注意注意:
使用help()查找函数的用法时,千万别带参数!!只需要输入函数名称即可。因为python的运行规则是从内到外;举个例子help(round(1.2)),也就是python会先计算round(1.2)的值,然后再运行help(1),所以这样无法查找round()函数的使用方法哦~
2. 自定义函数(Defining Functions)
先来一个例子:
def least_difference(a,b,c): # 创建自定义函数,给定函数名为diff_difference,并带有3个参数a、b、c
diff1 = abs(a - b) # 求(a-b)的绝对值并赋给变量diff1
diff2 = abs(b - c) # 求(b-c)的绝对值并赋给变量diff2
diff3 = abs(a - c) # 求(a-c)的绝对值并赋给变量diff3
return min(diff1, diff2, diff3) # 返回变量diff1、diff2、diff3中的最小值
上述函数名为diff_difference,并带有三个参数a、b和c;
规则:
1、自定义函数由关键字 “def” 引入,后加函数名称和冒号(:);
2、调用函数时,python将运行冒号(:)后的缩进的代码块;
3、“return” 是另一个自定义函数中常用的关键字;当python运行到了“return”,则会马上退出运行并且将值传递给后续的程序。
接下来看看如何调用上述自定义函数:
print(least_difference(1, 10, 100),
least_difference(1, 10, 10),
least_difference(5, 6, 7)
)
输出:
9 0 1
调用函数的方式:函数名称(参数)
如:least_difference(1, 10, 100)
或者我们也可以尝试使用help()函数来帮助学习如何调用函数哦~
3. 文档字符串(Docstring)
文档字符串主要用于帮助理解程序文档,增强程序的可读性;
def least_difference(a,b,c):
"""Return the smallest difference between any two numbers among a, b and c.
>>> least_difference(1, 5, -5)
4
"""
diff1 = abs(a - b)
diff2 = abs(b - c)
diff3 = abs(a - c)
return min(diff1, diff2, diff3)
文档字符串的用法:
1、三引号字符串,可跨行;
2、首行的首字母必须大写,并以句号(.)结尾;
3、第二部分是空行;
4、第三部分是详细的描述;
(以上用法除了第一点以外,其他都不是必须的,但是强烈建议养成这种书写习惯!有助于后续对程序的理解)
很多同学可能有疑问,文档字符串有什么作用呢?
我们一起来看看吧~
help(least_difference)
输出:
结果很明显啦,就是在调用help函数的时候,除了显示least_difference的用法,还额外多了几行对函数的描述。
没错,这几行描述就是刚刚的docstring。
还有一点需要解释的是,第三部分的“>>>” 其实是python交互模式下的命令提示符,这只是为了方便读者阅读程序而已~python并不会运行这一行程序的。
如果想知道更多例子,可以看看numpy函数中的np.eye的文档字符串
import numpy as np
help(np.eye)
4. 没有返回的函数(Functions that don’t return)
我们下面来看看,如果缺少了“return”,会发生什么事?
def least_difference(a,b,c):
"""Return the smallest difference between any two numbers among a, b and c.
>>> least_difference(1, 5, -5)
4
"""
diff1 = abs(a - b)
diff2 = abs(b - c)
diff3 = abs(a - c)
min(diff1, diff2, diff3)
print(least_difference(1, 10, 100),
least_difference(1, 10, 10),
least_difference(5, 6, 7)
)
输出:
None None None
从上述例子可以看出,调用diff_difference函数的结果是None(一个很特殊的值),跟其他语言中的null相似。
所以,如果没有了“return”,这个函数就显得毫无意义了,因为此函数并没有返回任何有用的信息。
就像print() 函数和help() 函数,两者都不带有“return”属性,而只是简单地在屏幕上显示运行结果而已。举个例子:
message = print()
print(message)
输出:
None
5. 默认参数(Default Arguments)
先看一个print函数的例子:
print(1, 2, 3, sep=' < ')
输出:
1 < 2 < 3
当我们调用help(print)函数时,我们可以看到其实print函数选择添加不同类型的参数。如上述代码,多了“sep = ’ < ’ “;表示可以给sep赋予一个特殊的值,并在需打印的参数之间放置这个特殊的值,如“ < “。
但如果我们没有指定这个特别的值,则sep会被默认为一个空格。
再看一段比较有意思的代码吧
def greet(who = 'Colin'):
print("hello, ",who)
greet()
greet(who = 'Kaggle')
greet('world')
输出:
hello, Colin
hello, Kaggle
hello, world
1、第一次调用函数greet(),括号内没有加任何参数,是因为本身在自定义函数时,就已经指定了参数为“Colin”;
2、第二次调用函数时,把参数“Colin”改为了“Kaggle”;
3、第三次调用函数时,省去了参数名称“who = ”;
注意:在这种情况下是可以省去参数名称的,因为参数是确定的。
6. 函数应用(Functions Applied to Functions)
简单来说,就是将函数作为参数应用于其他函数。先看看例子:
def mult_by_five(x):
return 5 * x
def call(fn, arg):
"""Call fn on arg"""
return fn(arg)
def squared_call(fn, arg):
"""Call fn on the result of calling fn on arg"""
return fn(fn(arg))
print(call(mult_by_five, 1),
squared_call(mult_by_five, 1),
sep = '\n')
输出:
5
25
我们先分部看print函数:
1、第一部分“call(mult_by_five, 1),表示调用了call函数,而call函数的返回是fn(arg),也就是mult_by_five(1),再次回到自定义函数mult_by_five(x),此函数返回的是5 * x,所以call(mult_by_five, 1)返回的就是5*1=5;
2、第二部分“squared_call(mult_by_five, 1)”,此处调用了squared_call函数,此函数返回的是fn(fn(arg));也就是mult_by_five(mult_by_five(1)),此处再次回到了mult_by_five函数了,mult_by_five(5) 返回的是5*5=25。因此此处的最后结果是25。
这种函数称为“高阶函数”
还有一个有趣的代码:
def mod_5(x):
"""Return the remainder of x after dividing by 5"""
return x % 5
print('Which number is biggest?',
max(100, 51, 14),
'Which number is the biggest modulo 5?',
max(100, 51, 14, key=mod_5),
sep='\n',)
输出:
Which number is biggest?
100
Which number is the biggest modulo 5?
14
今天差不多啦~拜~