JavaScript模块一

函数式编程

什么是函数式编程

函数式编程,FP是编程范式之一,我们常听说的编程范式还有面向过程编程、面向对象编程。

  • 面向对象编程的思维方式:把现实世界中的事物抽象成程序世界中的类和对象,通过封装、继承和多态来演示事物事件的联系
  • 函数式编程的思维方式:把下现实世界的事物和事物之间的联系抽象到程序世界(对运算过程进行抽象)
    • 程序的本质:根据输入通过某种运算获得相应的输出,程序开发过程中会涉及很多有输入和输出的函数
    • x --> f(联系、映射)–> y,y = f(x)
    • 函数式编程中的函数值得不是程序中的函数(方法),而是数学中的函数即映射关系,例如:y = sin(x),x和y的关系
    • 相同的输入始终要得到相同的输出(纯函数)
    • 函数式编程用来描述数据(函数)之间的映射
// 非函数式
let num1=2
let num2=3
let sum=num1+num2
console.log(sum)// 函数式
function add(n1,n2){return n1+n2
}
let sum=add(2,3)
console.log(sum)

函数是一等公民

  • 函数可以存储在变量中
  • 函数可以作为参数
  • 函数可以作为返回值

在JavaScript中函数就是一个普通对象(可以通过new Function()),我们可以把函数存储到变量/数组中,它还可以作为另一个函数的参数和返回值,甚至我们可以在程序运行的时候通过new Function(args)来构造一个新的函数。

  • 把函数赋值给变量
// 把函数赋值给变量
let fn=function(){console.log('Hello First-class Function')
}
fn()// 一个示例
const BlogController={index(posts){return views.index(posts)},show(post){return views.show(post)},create(attrs){return Db.create(attrs)},updata(post,attrs){return Db.updata(post,attrs)},destory(post){return Db.destory(post)}
}// 优化
const BlogController={index:views.index,show:views.show,create:Db.create,update:Db.create,destory:Db.destory
}

高阶函数

  • 高阶函数
    • 可以把函数作为参数传递给另一个函数
    • 可以把函数作为另一个函数的返回结果
  • 函数作为参数
// forEach
function forEach(array,fn){for(let i=0;i<array.length;i++){fn(array[i])}
}// filter
function filter(array,fn){let results=[]for(let i=0;i<array.length;i++){if(fn(array[i])){results.push(arrsy[i])}}return results
}
  • 函数作为返回值
// makeFn
function makeFn(){let msg='Hello function'return function(){console.log(msg)}
}
const fn=makeFn()// once
function once(fn){let done=falsereturn function(){if(!done){done=truereturn fn.apply(this,arguments)}}
}let pay=once(function (money){console.log(`支付:${money} RMB`)
})
  • 使用高阶函数的意义
    • 抽象可以帮我们屏蔽细节,只需要关注我们的目标
    • 高阶函数是用来抽象通用的问题
// 面向过程的方式
let array=[1,2,3,4,5]
for(let i=0;i<array.length;i++){console.log(array[i])
}// 高阶函数
let array=[1,2,3,4,5]
forEach(array,item=>{console.log(item)
})let r=filter(array,item=>item%2===0)
  • 常用高阶函数

forEach、map、filter、every、some、find/findIndex、reduce、sort...

const map=(array,fn)=>{let results=[]for(const value of array){results.push(fn(value))}return results
}const every=(array,fn)=>{let result=truefor(const value of array){result=fn(value)if(!result){// 有一个为false就跳出循环break}}return result    
}const some=(array,fn)=>{let result=falsefor(const value of array){result=fn(value)if(result){// 有一个为true就跳出循环break}}return result
}

闭包

  • 闭包:函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包。

    • 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
  • 闭包的本质:函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,但是堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员

  • 闭包案例

// 生成计算数字的多少次幂的函数
function makePower(power){return function(x){return Math.pow(x,power)}
}let power2=makePower(2)
let power3=makePower(3)// 第一个参数是基本工资,第二个参数是绩效工资
function makeSalary(x){return function(y){return x+y}
}let salaryLevel1=makeSalary(1500)
let salaryLevel2=makeSalary(2500)

纯函数

  • 纯函数:相同的输入永远会得到相同的输出,而且没有任何可观察的副作用
  • 数组的slice和splice分别是:纯函数和不纯的函数
    • slice返回数组中的指定部分,不会改变原数组
    • splice对数组进行操作返回该数组,会改变原数组
let numbers=[1,2,3,4,5]
// 纯函数
numbers.slice(0,3)
// 不纯的函数
numbers.splice(0,3)
  • 函数式编程不会保留中间计算结果,所以变量是不可改变的(无状态的)
  • 我们可以把一个函数的执行结果交给另一个函数去处理

纯函数的好处

  • 可缓存
    • 因为纯函数对相同的输入始终有相同的输出,所以可以把纯函数的结果缓存起来
const _=require('lodash')function getArea(r){return Math.PI*r*r
}let getAeraWithMemory=_.memoize(getArea)
console.log(getAeraWithMemory(4))
  • 自己模拟一个memoize函数
function memoize(f){let cache={}return function(){let arg_str=JSON.stringify(arguments)cache[arg_str]=cache[arg_str] || f.apply(f,arguments)return cache[arg_str]}
}
  • 可测试
    • 纯函数测试更方便
  • 并行处理
    • 在多线程环境下并行操作共享的内存数据很可能出意外情况
    • 纯函数不需压访问共享的内存数据,所以在并行环境下可以任意运行纯函数

副作用

// 不纯的函数
let mini=18
function checkAge(age){return age>=mini
}// 纯函数(有硬编码,后续可以通过函数柯里化解决)
function checkAge(age){let mini=18return age>=mini
}

副作用会让一个函数不纯,如果函数依赖外部的状态就无法保证相同的输出结果,就会带来副作用。

副作用来源:

  • 配置文件
  • 数据库
  • 用户的输入

柯里化

// 柯里化
function checkAge(min){return function(age){return age>=min}
}
// ES6写法
let checkAge = min => age => age>=min
  • 柯里化
    • 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变)
    • 然后返回一个新的函数接收剩余的参数,返回结果
  • lodash中的柯里化函数_.curry(func)
    • 功能:创建一个函数,该函数接收一个或多个func的参数,如果func所需要的的参数都被提供则执行func并返回执行结果。否则继续返回函数并等待接收剩余的参数。
    • 参数:需要柯里化的函数
    • 返回值:柯里化之后的函数
const _=require('lodash')
// 要柯里化的函数
function getSUm(a,b,c){return a+b+c
}
// 柯里化之后的函数
let curried=_.curry(getSum)
// 测试
curried(1,2,3)
curried(1)(2)(3)
curried(1,2)(3)
  • 案例
const _=requrie('lodash')const match=_.curry(function(reg,str){return str.match(reg)
})const haveSpace=match(/\s+/g)
const haveNumber=match(/\d+/g)const filter=_.curry(function(func,array){return array.filter(func)
})const findSpace=filter(haveSpace)
  • 模拟_.curry()函数的实现
function curry(func){return function curriedFn(...args){// 判断实参和形参的个数if(args.length<func.length){return function(){return curriedFn(...args.concat(Array.from(arguments)))}}// 实参和形参个数相同,调用func,返回结果return func(...args)}
}
  • 总结
    • 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
    • 这是一种对函数参数的缓存
    • 让函数变得更加灵活,让函数的粒度更小
    • 可以把多元函数转换成一元函数,可以组合使用函数产生更加强大的功能

函数组合

  • 函数组合可以让我们把细粒度的函数重新组合生成一个新的函数
  • 函数组合:如果一个函数要经过多个函数处理才能得到最终值,这个时候可以把中间处理过程的函数合并成一个函数
// 组合函数
function compose(f,g){return function(x){return f(g(x))}
}function first(arr){return arr[0]
}function reverse(arr){return arr.reverse()
}// 从右到左运行
let last=compose(first,reverse)
console.log(last([1,2,3,4]))
  • lodash中的组合函数
  • lodash中组合函数flow()或者flowRight(),它们都可以组合多个函数
  • flow()是从左到右运行
  • flowRight()是从右到左运行
const _=require('lodash')const toUpper=s=>s.toUpperCase()
const reverse=arr=>arr.reverse()
const first=arr=>arr[0]const f=_.flowRight(toUpper,first,reverse)
console.log(f(['one','two','three']))
  • 模拟实现flowRight()
// 多函数组合
function compose(...fns){return function(value){return fns.reverse().reduce(function(acc,fn){return fn(acc)},value)}
}// ES6
const compose=(...fns)=>value=>fns.reverse().reduce((acc,fn)=>fn(acc),value)
  • 函数组合要满足结合律
// 结合律
let f=compose(f,g,h)
let associative=compose(compose(f,g),h)===compose(f,compose(g,h))// true
  • 组合函数的调试
const _=require('lodash')const trace=_.curry((tag,v)=>{console.log(tag,v)return v
})const split=_.curry((sep,str)=>_.split(str,sep))
const join=_.curry((sep,array)=>_.join(array,sep))
const map=_.curry((fn,array)=>_.map(array,fn))const f=_.flowRight(join('-'),trace('map'),map(_.toLower),trace('split'),split(' '))
  • lodash/fplodash中的fp模块提供了使用的对以函数式编程友好的方法
// lodash模块
const _=require('lodash')_.map(['a','b','c'],_.toUpper)_.map(['a','b','c'])_.split('Hello World',' ')// lodash/fp 模块
const fp=require('lodash/fp')fp.map(fp.toUpper,['a','b','c'])
fp.map(fp.toUpper)(['a','b','c'])fp.split(' ','Hello World')
fp.split(' ')('Hello World')const f=fp.flowRight(fp.join('-'),fp.map(_.toLower),fp.split(' '))

Point Free

我们可以把数据处理的过程定义成与数据无关的合成运算,不需要用到代表数据的那个参数,只要把简单的运算步骤合成到一起,在使用这种模式之前我们需要定义一些辅助的基本运算函数。

  • 不需要指明处理的数据
  • 只需要合成运算过程
  • 需要定义一些辅助的基本运算函数
const f=fp.flowRight(fp.join('-'),fp.map(_.toLower()),fp.split(' '))
  • 案例演示
// 非Point Free模式
// Hello World => hello_world
function f(word){return word.toLowerCase().replace(/\s+/g,'_')
}// Point Free
const fp=require('lodash/fp')const f=fp.flowRight(fp.replce(/\s+/g,'_'),fp.toLower)
  • 使用Point Free的模式,把单词中的首字母提取并转换成大写
const fp=require('lodash/fp')const firstLetterToUpper=fp.flowRight(join('. '),fp.map(fp.flowRight(fp.first,fp.toUpper)),split(' ')
)

函子

  • 容器:包含值和值得变形关系(这个变形关系就是函数)
  • 函子:是一个特殊容器,通过一个普通对象来实现,该对象有map方法,map方法可以运行一个函数对值进行处理(变形关系)
// 一个容器,包裹一个值
class Container{// of 静态方法,可以省略new关键字创建对象static of(value){return new Container(value)}constructor(value){this._value=value}// map方法,传入变形关系,将容器里的每一个值映射到另一个容器map(fn){return Container.of(fn(this._value))}
}// 测试
Container.of(3).map(x=>x+2).map(x=>x*x)
  • 总结

    • 函数式编程的运算不直接操作值,而是由函子完成
    • 函子就是一个实现了map契约的对象
    • 我们可以把函子想象成一个盒子,这个盒子里面封装了一个值
    • 想要处理盒子中的值,我们需要给盒子的map方法传递一个处理值得函数(纯函数),由这个函数来对值进行处理
    • 最终map方法返回一个包含新值的盒子(函子)
  • 在函子中如果不小心传入null或undefined就会包类型错误,这时候就需要用到MayBe函子

class MayBe{static of(value){return new MayBe(value)}constructor(value){this._value=value}// 如果对空值变形的话直接返回值为null的函子map(fn){return this.isNothing() ? MayBe,of(null) : MayBe.of(fn(this._value))}isNothing(){return this._value === null || this._value === undefined}
}
  • 但是在MayBe函子中,我们很难确认是哪一步产生的空值问题
MayBe.of('hello world').map(x=>x.tpUppeCase()).map(x=>null).map(x=>x.split(' '))
// 返回值 MayBe {_value:null}
  • Either函子可以用来做异常处理
class Left{static of(value){return new Left(value)}constructor(value){this._value=value}map(fn){return this}
}class Right{static of(vlaue){return new Right(value)}constructor(value){this._value=value}map(fn){return Right.of(fn(this._value))}
}// 使用Either来处理异常
function parseJSON(json){try{return Right.of(JSON.parse(json))}catch(e){return Left.of({error:e.message})}
}
  • IO函子
    • IO函子中的_value是一个函数,这里是吧函数作为值来处理
    • IO函子可以把不纯的动作存储到_value中,延迟执行这个不纯的操作,把不纯的操作交给调用者来处理
const fp=require('lodash/fp')
class IO{static of(x){return new IO(function(){return x})}constructor(fn){this._value=fn}map(fn){// 把当前的value和传入的fn组合成一个新的函数return new IO(fp.flowRight(fn,this._value))}
}// 调用
let io=IO.of(process).map(p=>p.execPath)
console.log(io._value())
  • Task 异步执行
const {compose,curry} = require('folktale/core/lambda')
const {toUpper,first} = require('lodash/fp')// 第一个参数是传入函数的参数个数
let f=curry(2,function(x,y){console.log(x+y)
})// 函数组合
let f=compose(toUpper,first)// task
const {task}=require('folktale/concurrency/task')
const fs=require('fs')function readFile(filename){return task(resolver=>{fs.readFile(filename,'utf-8',(err,data)=>{if(err) resolver.reject(err)resolver.resolve(data)})})
}// 调用run执行
readFile('package.json').map(split('\n')).map(find(x=>x.includes('version'))).run().listen({onRejected:err=>{console.log(err)},onResolve:value=>{console.log(value)}})
  • Pointed函子:实现了静态of方法的函子

  • Monad函子:是一个可以变扁的Pointed函子,Monad函子具有of和join方法,并遵守一些定律

// 使用IO函子
const fs=require('fs')
const fp=require('lodash/fp')let readFile=function(filename){return new IO(function(){return fs.readFileSync(filename,'utf-8')})
}let print=function(x){return new IO(function(){console.log(x)return x})
}// IO(IO(x))
let cat=fp.flowRight(print,readFile)
// 调用
let r=cat('package.json')._value()._vlue()
console.log(r)// 使用Monad函子
class IO{static of(x){return new IO(function(){return x})}constructor(fn){this._value=fn}map(fn){return new IO(fp.flowRight(fn,this._value))}join(){return this._vlaue}flatMap(fn){return this.map(fn).join()}
}let r=readFile('package.json').map(fp.toUpper).flatMap(print).join()
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 函数周期表丨时间智能丨表丨DATESBETWEEN

    DATESBETWEEN函数 DATESBETWEEN函数隶属于“时间智能函数”,属于“表”函数。可以用作生成固定范围的日期,也可以用来作为限定条件来对聚合计算进行限制。 在业务需求中,有时候需要将数据与上一阶段的数据进行对比,注意,这里说的是一个阶段,不是一个点;还有一种情况是需…...

    2024/5/4 0:26:23
  2. 每日一道算法题LeetCode124:Binary Tree Maximum Path Sum(二叉树中的最大路径和)

    二叉树中的最大路径和题目分析题解递归总结 题目 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。分析 今天又是一道困难题,昨天的那道写了半天没写出来,后面看了题…...

    2024/4/24 14:23:15
  3. Makefile中使用条件判断

    使用条件判断,可以让 make 根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。一、示例下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用 GNU 函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) i…...

    2024/4/24 14:23:14
  4. 函数周期表丨时间智能丨表丨DATESINPERIOD

    DATESINPERIOD函数 DATESINPERIOD函数隶属于“时间智能函数”,属于“表”函数。这个函数的功能很强大,用途方面也是比较广泛的。 用途1:可以用来返回固定的日期值。 用途2:可以用来算移动平均。 用途3:可以算固定日期内的累计值。 语法 DAX= DATESINPERIOD(<日期列>…...

    2024/4/24 14:23:14
  5. unittest框架--verbosity详解

    verbosity是一个选项,表示测试结果的信息复杂度,有0、1、2三个值。0:静默模式,只能获取总的测试数和总的执行结果,比如成功3,失败41:默认模式,非常类似静默模式,只是在每个成功的测试用例前面会有".",在每个失败的测试用例前面有"F"2:详细模式,…...

    2024/4/24 14:23:13
  6. java用暴力匹配算法完成字符串的匹配

    此算法需要进行大量的回溯,效率较低。 /*** 用暴力匹配算法完成字符串的匹配* @author 冷了**/ public class ViolentMatch {public static void main(String[] args) {/*需求:* 有一个字符串 string1 = "AABBAABBCCBBAA",和一个子串 string2 = "ABBCC"…...

    2024/5/4 3:21:49
  7. 函数周期表丨时间智能丨表丨DATESMTD-QTD-YTD

    DATESMTD函数/DATESQTD函数/DATESYTD函数 DATESMTD函数,DATESQTD函数与DATESYTD函数三者都隶属于“时间智能函数”,属于“表”函数。因为三者的用途、语法结构基本上是类似的,白茶决定一起打包带走。 用途1:用于返回一张表,表中的日期列分别是月份至今、季度至今、年度至今…...

    2024/4/24 14:23:08
  8. 常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全

    innerHTML: 设置或获取位于对象起始和结束标签内的 HTML scrollHeight: 获取对象的滚动高度。 scrollLeft: 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop: 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 scrollWidth: 获…...

    2024/4/24 14:23:07
  9. docker安装mysql和redis

    一、安装mysql 1、下载镜像文件 docker hub网址:https://hub.docker.com/ docker pull mysql:5.7 :版本 2、创建实例并启动 docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata…...

    2024/5/4 2:53:06
  10. 使用 VS Code绘图【画流程图】(是不是又酷了一点)

    我对于VS Code这款工具真的是情有独钟,非常痴迷于去探索它丰富的插件中自己喜欢的那款!最近又发现了一个使用VS code来绘图插件,VS code秒变绘图工具,是不是感觉它又酷了一点呀!以前一直用Win10自带的画图工具,总是感觉功能上有点局限性,这下被这个插件给解决了!这个插…...

    2024/4/24 14:23:05
  11. 求余+自增减+问号+逗号运算符

    笔者近来重习C语言以下是笔者的一些学习心得,若有不当之处请斧正,将以代码的方式阐述心得体会 #include <stdio.h> #include <stdlib.h> int main() { //求余运算问题 //一 符号问题 /* 求余运算的符号取决于被除数的符号,这与我们常见的数学除法有区别 / print…...

    2024/4/24 14:23:06
  12. Git 提交命令

    Git BashGitee Github 提交第一行代码 在创建完仓库之后,用户可以通过如下方式,可以向仓库提交第一行代码。 此处我们以用户账号下命名为 HelloGitee 的仓库为例。对应的仓库地址为:https://gitee.com/用户个性地址/HelloGitee.git,在实际实践中,你可以将用户个性地址替换…...

    2024/4/24 14:23:03
  13. [LeetCode]刷题-最长公共前缀

    题目 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。 示例 1:输入: ["flower","flow","flight"] 输出: "fl" 示例 2:输入: ["dog","racecar","car"] 输出: &…...

    2024/4/24 14:23:03
  14. ida 反编译按F5没有出现伪代码

    so和ida的位数不一致导致。...

    2024/4/15 3:15:45
  15. 创建一个actor表,包含如下列信息

    sql实战 创建一个actor表,包含如下列信息问题描述Sql语句 问题描述 创建一个actor表,包含如下列信息(注:sqlite获取系统默认时间是datetime(‘now’,‘localtime’))列表 类型 是否为NULL 含义actor_id smallint(5) not null 主键idfirst_name varchar(45) not null 名字las…...

    2024/4/15 3:15:44
  16. 函数周期表丨时间丨值丨时间类函数

    时间类提取函数 本期呢,白茶决定把一部分时间函数放在一块讲了,因为这些函数的作用和函数的语法都是差不多的。包括以下函数:YEAR函数,MONTH函数,DAY函数,HOUR函数,MINUTE函数,SECOND函数。这些函数分别对应咱中国话的年度、月份、日期、小时、分钟、秒。 语法 这些函数…...

    2024/4/15 3:15:44
  17. win10 Python读取文件 编码问题

    UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xaf in position 34: illegal multibyte sequence 原始读取代码:with open(file, r) as f:for line in f:line = line.strip().split("\t")en.append(["BOS"] + nltk.word_tokenize(line[0].lower…...

    2024/4/19 8:45:05
  18. Python30期第三十八天课程总结

    Python30期第三十八天课程总结python 操作mysqlsql 注入攻击python 操作mysql 增删改查导出数据库 python 操作mysql 1.基本语法(1) 创建连接 host user password database 这四个参数必须写(2) 创建游标对象,该对象可以进行增删改查操作(3) 执行sql语句(4) 获取数据(5) 释…...

    2024/4/19 14:46:54
  19. 如何实现一个阻塞式队列(BAT面试必会!!!!)

    上代码!!(看注释) /*** 阻塞式队列:* (1)基于数组的循环队列实现* (2)提供一个队列* 取元素消费的时候,如果队列为空,阻塞等待。* 如果队列满了,存元素生产的时候,阻塞等待*/ public class MyBlockingQueue<T> {private Object[] table;//取…...

    2024/4/24 14:23:01
  20. 杭电OJ-1003

    最大连续子序列和(动态规划):状态方程:dp[i] = max(a[i], a[i] + dp[i-1])#include <cstdio> #include <algorithm> using namespace std; const int maxn = 100010; int a[maxn]; struct node{int start;int total; }; node dp[maxn]; int main(void){int t;s…...

    2024/4/24 14:23:01

最新文章

  1. 【LAMMPS学习】八、基础知识(5.6)绝热核/壳模型

    8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…...

    2024/5/4 3:55:58
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【Ubuntu】在 Windows 和 Ubuntu 之间传输文件

    在 Ubuntu 上安装 Samba&#xff1a; sudo apt-get update sudo apt-get install samba在 Ubuntu 上创建一个共享文件夹并设置权限&#xff1a; mkdir /home/your_username/shared sudo chown nobody:nogroup /home/your_username/shared sudo chmod 0777 /home/your_username/…...

    2024/5/2 5:54:29
  4. 分享一个Python爬虫入门实例(有源码,学习使用)

    一、爬虫基础知识 Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍: 架构和组成:下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。解析器:用于解…...

    2024/5/4 3:49:57
  5. 爱自然生命力粤东中心家风家教高端研讨会在广东汕头盛大开启

    2024年3月30日&#xff0c;爱自然生命力粤东中心家风家教高端研讨会在广东汕头金海湾大酒店隆重召开。 &#xff08;图为活动现场&#xff09; 本次由爱自然生命力体系粤东中心主办的粤东家风家教高端研讨会&#xff0c;主题为“携手校家社&#xff0c;共筑新格局”&#xff0…...

    2024/5/1 13:42:48
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57