1.函数进阶
调用函数
def fun1():
print('Hello') #这是一个没有返回值的函数
def fun2():
return 'Hello' #函数的返回值是'Hello'
print(fun1()) #调用fun1会执行函数中的print语句,函数没有返回值,所以返回None
print(fun1) #打印fun1对象本身
print(fun2()) #调用fun2函数,并且打印返回值
作用域
全局变量,定义在模块里,整个模块都可以使用 局部变量,定义在函数里,只在函数内部使用
str1=600 #全局变量
def fun3():
global str1 #声明str1是一个全局变量
str1=100
return str1
print(fun3()) #调用一次函数,在函数的外面就可以使用全局变量了
print(str1)
匿名函数
写一个函数,返回某数的平方
def pingfang(n):
return n*n
print(pingfang(3))
匿名函数写法
pingfang2=lambda n:n*n #n是形参,后面的冒号是固定写法,返回值是n*n
print(pingfang2(5))
函数中的列表缺省值
每次调用列表之后,保留上次的值
def add(x,list1=[]):
if x not in list1:
list1.append(x)
return list1
print(add(1)) #一开始,list1=[],放入了1,变为[1]
print(add(2)) #一开始,list1=[1],放入了2,变为[1,2]
print(add(3)) #一开始,list1=[1,2],放入了2,变为[1,2,3]
print(add(6,[100])) #用户传的是[100],放入了6,所以列表变为[100,6]
面向对象中的单例模式
class Single:
def __init__(self): #初始化方法
pass
def __new__(cls, *args, **kwargs): #构造方法
if not hasattr(cls,'obj'): #判断类当中有没有实例对象
cls.obj=object.__new__(cls) #如果没有,则产生一个实例对象
return cls.obj
s1=Single()
s2=Single()
print(s1==s2)
正则表达式 从一段字符串中,提取出需要的字符,返回值是列表
import re
str1='去年今日此门中,人面桃花相映红'
print(re.findall('面(.*?)相',str1)) #前后的值都确定了
print(re.findall('面(.*?)',str1)) #.*?懒惰匹配,在符合规则的情况下,尽可能少的取值
print(re.findall('面(.*)',str1)) #.*贪婪匹配,在符合规则的情况下,尽可能多的取值
str2='abcdeacdebacedb'
print(re.findall('a(.*?)e',str2)) #懒惰匹配['bcd', 'cd', 'c']
print(re.findall('a(.*)e',str2)) #贪婪匹配['bcdeacdebac']
re.S 允许跨行匹配
str3='''Hellownbgnjgh fgdyentbgdvf
ntmjy k hfjgfbtng nbmu,jg hnfnmjt,kg hg
gh5nytbgvfwrf5hytnhbgdWorld'''
print(re.findall('Hello(.*?)World',str3,re.S))
第二节课
2.网络爬虫
import re import requests #网络爬虫模块
url='http://www.quannovel.com/read/489/' #需要进行爬虫的网址
req=requests.get(url)#获取网页内容
name=re.findall('<h2>(.*?)<i c',req.text)[0] #获取书名
mulu=re.findall('class="name ">(第.*?)</a>',req.text) #获取章节目录
Wangzhi=re.findaa(‘’)
(.*?).html',req.text) #获取网址
dict1={} for i in range(len(mulu)): dict1[mulu[i]]=f'{url}{wangzhi[i]}.html' #将目录和网址存放到字典中
print(k,v)
#将九九乘法表写入文件中
with open('D:/九九乘法表210802.txt','w+') as file1:
for i in range(1,10):
file1.write(f'{j}*{i}={i*j}\t')
file1.write('\n')