python爬⾍学习笔记(⼀)--Python函数五种参数类型
+soup.find()函数使⽤
中我们已经可以简单的下载⽹页中的图⽚到本地了,这⾥做⼀个补充:
soup.find和soup.find_all中的参数是⼀样的。不相信可以在pycharm中,按住ctrl单击我们的soup.find函数,然后我们会看到这样⼀个定义:
def find(self, name=None, attrs={}, recursive=True, text=None,
**kwargs):
"""Return only the first child of this Tag matching the given
criteria."""
r = None
l = self.find_all(name, attrs, recursive, text, 1, **kwargs)
if l:
r = l[0]
s parameter
return r
其实内部调⽤的就是find_all,然后取的是第⼀个元素。
另对于<div class='content'></div>此类型的标签元素,我们不能使⽤soup.find('div', class='content'),因为class是定义⼀个类的关键字,⽽此关键字是不能作为参数的。
如:
我们需要在页⾯中到对应的<ul class='news-list'></ul>
import requests
from bs4 import BeautifulSoup
response = (url = "yz.chsi/kyzx/tjxx/")
page =
soup = BeautifulSoup(page, 'html.parser')
ul = soup.find('ul','news-list')
print(ul)
运⾏截图:
注释:
ul = soup.find('ul','news-list')的等价写法:
ul = soup.find(name='ul', attrs={"class":'news-list'})
Python的参数类型⼀共有5种:POSITIONAL_OR_KEYWORD、VAR_POSITIONAL(位置参数)、VAR_KEYWORD(关键字参数)、KEYWORD_ONLY、POSITIONAL_ONLY
其中 POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、VAR_KEYWORD、KEYWORD_ONLY ⽐较常⽤
1、可变长位置参数,接收⼀个元组:参数类型为VAR_POSITIONAL时,即*args参数,只能通过位置传值,如
#位置参数
def aaa(*args):
print("参数是:{0}".format(args))
aaa("weizu", "tiantian")
aaa(args="wang")#这种写法就是错误的
因为只是代表位置⽽不是说这个位置有为args的名字,运⾏截图:
def aaa(*args, name):
print("参数是:{0}".format(args))
aaa("weizu", "tiantian")#这种写法也是错误的
错误的原因其实类似,因为aaa⽅法,⾸个是位置参数,⽽代表了⼀个位置,所以在调⽤的时候,默认所有的不带指定(即关键字)的传参⽅式都是在这个位置之内,所以也是错误的,运⾏截图:
正确的调⽤⽅式是:
aaa("weizu", name = "tiantian")
2、可变长关键字参数,接收⼀个字典:参数类型为VAR_KEYWORD,即 **kwargs参数,只能通过关键字传值,如
def aaa(**kwargs):
print("参数是:{0}".format(kwargs))
aaa("weizu")#错误的写法
运⾏截图:
正确的书写⽅式是:字典,使⽤的时候传⼊键值对
def aaa(**kwargs):
print("参数是:{0}".format(kwargs))
aaa(name = "weizu", wo = 'wang')
截图:
不难发现关键字参数⽆论是⼏个参数,传⼊的形式是以字典的⽅式传⼊。⽽且,关键字参数要放在最后⾯。
3、位置或关键字参数,参数的类型为POSITIONAL_OR_KEYWORD时,说明此参数前⾯没有VAR_POSITIONAL类型的参数,可以通过位置或关键字传值,如
def aaa(name):
print("参数是:{0}".format(name))
aaa(name = "weizu")
#或者
aaa("hello")
截图:
这种参数也是最常⽤的参数。
4、关键字参数,参数类型为KEYWORD_ONLY时,说明此参数前⾯存在VAR_POSITIONAL类型的参数,只能通过关键字传值,如
其实前⾯介绍过:
def aaa(*args, name):
print("参数是:{0}".format(name))
aaa("haohao",name = "weizu")  #这⾥只能使⽤关键字name
5、默认参数
def aaa(*args, name='weizu'):
print("参数是:{0}".format(name))
aaa("haohao")
也即是使⽤name='value',定义个⼀初始值,在不传⼊的时候,值就是默认的设置。
使⽤:
def fun(a, b, c=0, *args, **kw):
print(a, b, c, args, kw)
fun("12", "wizu", 3, "alfjalfj","weizu")
fun("12", "wizu", 3, "alfjalfj","weizu", bb = 'test')
运⾏截图:
因为我们不指定bb='test'的键值对形式,那么编译器会默认解析成前⾯变长位置参数,即⼀个元组。
使⽤的时候,也通常遵循:位置或关键字参数、默认参数、可变长位置参数、可变长关键字参数的顺序使⽤。当然了看编译的结果⾃⼰也就可以改改就出来了。
作者:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。