《零基础上手Python爬虫系列》 - 07 Python函数

本篇主要阐述函数的一些使用方法,持续更新。

函数是用来实现单一或相关联功能的代码段,是代码复用的重要手段,函数能提高应用的模块性。

函数入门

1. 理解函数

函数是Python的重要组成部分,可以将特定的功能封装为一个函数。

通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像是一个黑匣子,程序将参数传入,该黑匣子经过一番处理之后,返回我们需要的数据。

2. 自定义函数和调用

Python提供了许多内置函数,比如print(),自己也可以创建函数,称为自定义函数。

def functionname(params):
   "函数_文档字符串"
   function_suite
   return [expression]

规则:

  • 函数代码块以 def 关键词开头,后接函数名称和圆括号()
  • 括号内为形参
  • 函数的第一行语句可以加注释
  • 函数内容以冒号起始,通过缩进标识函数体
  • return [表达式] 结束函数,没有会返回None
  • 从可读性上讲,函数名应该用有意义的小写单词连接,下划线分隔

访问的时候直接

functionname()

调用Python的函数,需要根据函数定义,传入正确的参数。如果函数调用出错,一定要学会看错误信息

3. 函数文档

函数文档就是函数体的注释部分

def hi():
'''
这是函数的说明文档
'''
# 单行函数可以拼接到一行上
return x if x > y else y

通过help()函数查看指定函数的帮助信息,或者通过函数的doc属性访问函数的说明文档

help(hi)

print(hi.__doc__)

4. 返回多个值

如果程序需要有多个返回值,则可以将多个值包装成列表返回,也可以直接返回,Python可以自动将多个值封装成一个元祖。

>>> def sum_and_avg(x, y):
...   sum = x + y
...   avg = x / y
...   return sum, avg
...
>>

Python提供序列解包功能,可以直接使用多个变量接收函数返回的多个值

> a,b = sum_and_avg(1,2)
>>> print(a,b)
3 0.5
>>> a = 1
>>> b = 2
>>> c = 3
>>> a,b,c
(1, 2, 3)

# 简化
>>> a,b,c = 1,2,3
>>> a,b,c
(1, 2, 3)

5. 递归函数

在一个函数体内调用他自身,被称为函数递归,函数递归包含了一种隐式的循环。

定义递归,有一个重要的规定:为避免死循环,递归一定要向已知方向上进行。

常用操作:遍历某个路径下的所有文件

设置递归的最大次数

import sys
sys.setrecursionlimit(9999999)

6. 空函数

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

def nop():
    pass

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

函数参数

1. 位置参数和个关键词参数

两者均是针对函数调用时而言

>>> def calc(width,height):
...     width = str(width)
...     height = str(height)
...     return "宽:" + width + "高:" + height
...

位置参数按顺序接收

>>> calc(1,2)
'宽:1高:2'

关键词参数,无须遵守定义形参的顺序,可读性高

>>> calc(height=2,width=1)
'宽:1高:2'

2. 参数默认值

>>> def calc(width=0,height=0):
...     width = str(width)
...     height = str(height)
...     return "宽:" + width + "高:" + height
...
>>> calc()
'宽:0高:0'

3. 参数收集

Python允许在形参前面加一个*,标识该参数可以接收多个参数值,多个参数值被当做元祖传入

>>> def test(a, *books):
...     print(books)
...
>>> test(5, 'java', 'php', 'python')
('java', 'php', 'python')

函数作用域

>>> def foo():
...     name = 'zhangsan'
...     def too():
...         print(name)
...         name = 'lisi'
...     too()
...
>>> foo()
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 6, in foo
  File "", line 4, in too
UnboundLocalError: local variable 'name' referenced before assignment

too()函数中定义的name局部变量遮蔽了它所在foo()函数内的局部变量,会导致报错

nonlocal和global的功能大致相似,global用于声明访问全局变量,而nonlocal用于声明当前函数所在函数内部的局部变量。

函数高级

1. 使用函数变量

2. 使用函数作为函数形参

3. 使用函数作为返回值

lambda

1. 局部函数

def add(x,y): return x + y

2. lambda表达式

lambda表达式是功能更灵活的代码块,他的本质是匿名的、单行函数体的函数。

lambda x,y : x + y

两个用途:

  • 对于单行函数,省去定义函数的过程,让代码更简洁
  • 用完立即释放,提高了性能

常用内置函数

函数列表:https://docs.python.org/3/library/functions.html#abs

https://blog.csdn.net/fei347795790/article/details/102092736

你可能感兴趣的:(《零基础上手Python爬虫系列》 - 07 Python函数)