python的冗余参数

本文详细介绍了Python函数中形参和实参的关系、元组和字典参数的使用方法,以及如何处理多余参数等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.python函数的形参和实参必须一 一对应
2.定义一个函数和元组,将元组中的值传递给参数,如:

t=('a','b')
def fun(x,y):
    print x,y

要使元组中的两个元素分别与函数的x,y对应,执行下面的语句

fun(*t)#用单星号

运行结果:a b
而运行fun(t)语句,会出现错误。因为t只表示一个参数。
3.参数的初始化

>>> def fun(name="xiaohong",age=30):
    print('name:%s'%name)
    print('age:%s'%age)


>>> fun()
name:xiaohong
age:30

>>> fun("xiaoming",36)
name:xiaoming
age:36
>>> 

4、将字典中的值传递给参数:
分别定义一个字典和函数

t={'name':'xiaogang','age':31}
def fun(age,name):
    print('name:%s'%name)
    print('age:%s'%age)
>>>fun(**t)#用双星号

运行结果:

name:xiaohong
age:31

字典中的键要与形参一模一样。
5.处理多余参数

>>> def f(x,*args):
    print (x)
    print (args)


>>> f(1)
1
()

>>> f(1,2,3)
1
(2, 3)

上面多余的参数会被加入到元组中。
而执行下面的语句会出错,因为y=40需要字典类型存储。
这里写图片描述

>>> def f(x,*args,**kwargs):
    print (x)
    print (args)
    print (kwargs)


>>> f(1)
1
()
{}
>>> f(x=1,y=2)
1
()
{'y': 2}
>>> 
>>> f(1,2,3,4,5,6,7,y=100,z=300)
1
(2, 3, 4, 5, 6, 7)
{'y': 100, 'z': 300}
### 如何减少 Python 爬虫代码中的冗余并提高效率 为了降低 Python 爬虫的冗余度以及提升其执行效率,可以从以下几个方面入手: #### 1. 避免重复请求 如果多次访问相同的 URL 或者抓取相同的数据,则可以通过缓存机制来避免不必要的网络请求。可以利用 `requests_cache` 库实现简单的 HTTP 缓存功能。 ```python import requests_cache # 设置缓存有效期为一天 requests_cache.install_cache('cache', expire_after=86400) response = requests.get("https://example.com") print(response.text) ``` 通过这种方式能够显著减少对服务器的压力,并加快程序运行速度[^1]。 #### 2. 使用更高效的解析工具 虽然 BeautifulSoup 是非常强大的 HTML 解析库,但在某些场景下可能显得较慢。对于大规模数据处理需求来说,考虑采用 lxml 这样的高性能 XML/HTML 处理器可能会更好一些。 ```python from lxml import etree html_content = ''' <html><head></head> <body> <div class='item'>Item One</div> <div class='item'>Item Two</div> </body></html>''' tree = etree.HTML(html_content) items = tree.xpath("//div[@class='item']/text()") print(items) # 输出 ['Item One', 'Item Two'] ``` lxml 提供了更快的速度和更低内存消耗的选择器方法[^2]。 #### 3. 合理设置并发数 当面对大量网页需要爬取时,单线程操作显然不是最佳方案。适当增加并发量可以帮助缩短整体耗时。然而需要注意的是过度频繁地发起连接可能导致被封禁IP地址等问题;因此建议控制好最大并发数量,并加入随机延时策略以模拟人类行为模式。 ```python import asyncio import aiohttp async def fetch(session, url): async with session.get(url) as response: return await response.text() urls = ["https://example.com"] * 5 async def main(): connector = aiohttp.TCPConnector(limit_per_host=5) async with aiohttp.ClientSession(connector=connector) as session: tasks = [fetch(session, u) for u in urls] results = await asyncio.gather(*tasks) print(results[:2]) loop = asyncio.get_event_loop() loop.run_until_complete(main()) ``` 上述例子展示了异步IO模型下的批量获取资源过程。 #### 4. 正确命名参数规避冲突 正如提到过的那样,“class”作为Python内置关键字无法直接用于函数调用之中。此时应该改用替代形式比如“attrs”,它允许我们指定任意属性名称及其对应的值列表来进行匹配筛选工作。 ```python soup.find_all(attrs={"class": "green"}) ``` 这种方法有效解决了由于关键词限制所引发的技术难题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值