函数的基本概念:
python中函数分为以下四种:
1,python内置函数:如abs,len,max,min;
2,标准库函数:通过import声明标准库,如:math,random,通过import声明引入;
3,第三方库:由社区提供,同样由import声明引入;
4,由函数自定义的函数;
函数的使用:
函数的定义与调用:
函数定义的语法格式如下:
def 函数名([参数列表]):函数体
注意:
1,多个参数使用‘,’隔开;
2,不要少了圆括号后的‘ :’;
3,函数体与def语句之间要保持一定的缩进;
4,无论显示声明与否,函数语句都会返回一个return值:
例如:
def dayin(a):print(a)print(dayin(a))
若输入:2,则输出结果为:2; None。即说明了在没有显示说明return值时,实际上会返回None值
ps:
函数帮助文档的书写:
帮助文档可以随时对于某一变量或是某一函数的作用进行说明(由自己撰写),其声名方式如下:
def shili(x):'''本代码作为解释说明的作用'''函数体
用shift + tab 唤出;
函数的参数:
1,默认值函数:
在声明函数时,可以为某些参数指定默认值,当没有传入对应的实参值时,该变量就会使用默认值
例如:
def babble(words, times = 1):print((words + " ") * times)
babble("hello",3)
babble("nihao")输出:
hello hello hello
nihao
注意:默认值参数必须写在形参列表的右边
2,按名称传递参数:
可以指定某一个参数名进行传参,摆脱了顺序的限制:
def test(a, b):print(a + '=' + b)
test(a = "aa", b = "bb")
test(b = "bb", a = "aa")结果相同
在print函数中按名称传参的例子:
若希望在输出的不同项之间用指定字符A相连,可以调用形式:
print(..., sep = "A")
若不希望在一次输出后换行,可以使用形式:
print(...., end = "")
自动换行的实现:
for i in range(1, 10):print(i, end = ", " if i %3 != 0 else "\n")1, 2, 3
4, 5, 6
7, 8, 9
这里注意一个新的if else语句书写形式:
A if 条件1 else B
3,可变参数:
在定义函数的参数时,
使用带 * 的参数,意味着允许向函数传递可变数组的参数。调用函数时,自该参数后的所有参数都被收集为一个元组。例如:
def test(*a):for i in a:print("{:^4}".format(i), end = ' ')return len(a)
count = test('李白', '杜甫')
print("共{}人".format(count))输出:李白 杜甫 共2人
使用带 ** 的参数,自该参数后的所有参数都被收集为字典
def test(**a):print(a)
test(group1 = 10, group2 = 20, group3 = 30)输出:{'group1': 10, 'group2': 20, 'group3': 30}
若同时存在多个可变参数与默认值参数该怎么传参:
4,形参与实参的讨论:
单个数据类型与c++类似,不再赘述;
当实参是列表等可变对象时,形参实质上就是对该列表的直接引用,形参的改变之间反馈在实参列表上。
(ps: 列表,字典...... 均为可变对象; int, float, str(字符串),bool 类型均是不可变对象)
5,函数返回多个值:
可以采用直接返回一个元组,返回多个值:
例如:
def fun(a, b):return (a, b, a / b, a % b)
n1 = fun(6 ,4 )
print(n1)
lambda函数:
定义:
lambda函数——匿名函数,是一种在同一行进行函数定义的方法。广泛用于需要函数对象作为参数或者函数比较简单且只是用一次的场合。
定义语法格式:
lambda 参数1, 参数2, ....: <函数语句>
实例:
输出负数:
f = lambda x: x < 0
lis = [1, -1, 2, 3, -2, -3]
for i in filter(f, lis):print(i)
注意:这里的filter函数用于过滤序列,过滤掉不符合条件的元素。
filter函数接受两个参数:第一个为判断函数,第二个是序列
也可以简化为:
lis = [1, -1, 2, 3, -2, -3]
for i in filter(lambda x: x < 0, lis):print(i)
利用lambda对字典元素按值或按键排序:
若未提前说明:则默认视作字符串,通过字典序比较大小:
sorted(dict_data.items())按照值比大小
sorted(dict_data.items(), key = lambda x: x[1]) 按值与10的余数比大小:
sorted(dict_data.items(), key = lambda x: x[1] % 10) 按照列表中元素的长度比大小:
sorted(dict_data.items(), key = lambda x: len(x))
变量的作用域:
两种最基本的变量作用域是局部变量和全局变量。
全局变量:
变量在函数外命名。
局部优先原则:
在局部变量与全局变量同名时,优先使用局部变量。
注意:若要强制声明为全局变量,则应加上global,声明后面出现的同名局部变量即是全局变量
递归函数 的调用:
声明好边界——即具体return值;
例如递归方法求最大公约数:
def gcd(a, b):if b == 0: return aelse : return gcd( b, a % b) %%这一步相当于自动完成了较大数与较小数的交换print(gcd(12, 24))
实例运用:
补充:
zip函数的使用:将对应元素打包成一个个元组,然后返回由这些元组组成的对象
zip([1, 2, 3], ['a', 'b', 'c'])输出结果为 (1, ‘a’),(2, 'b'),(3, 'c')
相反的,将匹配后的结果再给zip函数,则会返回拆开后的两个列表
统计文章词频:
def gettext(text): ##除去特殊符号和字母统一小写text = text.lower()for ch in ",.;?=:\'":text = text.replace(ch, " ")return textdef wordfreq(text):words = text.split() ##split默认以空格和换行符为间隔分割元素counts = {}for word in words:count[word] = counts.get(word, 0) +1excludes = {'the','and','to','of','a','be'} ##去掉无意义单词for word in excludes:del(counts[word])items = list(counts.items())items.sort(key = lambda x: x[1], reverse = True)return items[:topn]