首页 文章 精选 留言 我的

精选列表

搜索[异步方法],共10000篇文章
优秀的个人博客,低调大师

Java script中的函数使用方法

前言 什么是函数,就是把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在开发中可以反复调用,函数的作用就是封装一段代码,可以重复使用。 1. 函数的声明及调用 1.1声明 关键字声明 function 函数名(){ // 函数体 } 表达式声明 var fn = function() { // 函数体 } 特点: 函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。 一个函数一般都特定的用来干 一件 事情 1.2 调用 调用函数的语法: 函数名(); 特点: 函数体只有在调用的时候才会执行,调用需要()进行调用。 可以调用多次(重复使用) // 声明函数 function sayHi() { console.log("吃了没?"); } // 调用函数 sayHi(); // 求1-100之间所有数的和 function getSum() { var sum = 0; for (var i = 0; i < 100; i++) { sum += i; } console.log(sum); } // 一段代码可以多次调用 getSum(); getSum(); getSum(); 1.2 参数 为什么要有参数 function getSum() { var sum = 0; for (var i = 1; i <= 100; i++) { sum += i; } console.log(); } // 虽然上面代码可以重复调用,但是只能计算1-100之间的值 // 如果想要计算n-m之间所有数的和,应该怎么办呢? 语法: // 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部 // 带参数的函数声明 function 函数名(形参1, 形参2, 形参...){ // 函数体 } // 带参数的函数调用 函数名(实参1, 实参2, 实参3); *形参和实参 * 形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。 实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。 function fn(a, b) { console.log(a + b); } var x = 5, y = 6; fn(x,y); // x,y实参,有具体的值。 // 函数执行的时候会把x,y复制一份给函数内部的a和b, // 函数内部的值是复制的新值,无法修改外部的x,y JS 函数在调用时,允许传多个实参,就是实参个数可以比形参个数多; 1.3 函数的返回值 当函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个值 返回值语法: //声明一个带返回值的函数 function 函数名(形参1, 形参2, 形参...){ //函数体 return 返回值; } //可以通过变量来接收这个返回值 var 变量 = 函数名(实参1, 实参2, 实参3); 返回值详解: 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined 如果函数使用 return语句,那么跟在return后面的值,就成了函数的返回值 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。 作业: 求1-n之间所有数的和 求n-m之间所有数的和 求2个数中的最大值 1.4 函数相关的其它事情 1.4.1 匿名函数与自调用函数 匿名函数:没有名字的函数 匿名函数如何使用: 将匿名函数赋值给一个变量,这样就可以通过变量进行调用 匿名函数如果没有任何变量来表示它,那么就不能直接调用来执行,因此可以通过匿名函数的自调用的方式来执行 (function () { alert(123); })(); 关于自执行函数(匿名函数自调用)的作用:防止全局变量污染。 1.4.2 函数本身也是值 function fn() {} console.log(typeof fn); 函数作为参数 因为函数也是一种值类型,可以把函数作为另一个函数的参数,在另一个函数中调用 function f1(f){ //f = function f2(){ // console.log(2); //} f(); } function f2(){ console.log(2); } f1(f2); //2 函数做为返回值 因为函数是一种类型,所以可以把函数可以作为返回值从函数内部返回。 function fn(b) { var a = 10; return function () { alert(a+b); } } var f = fn(5); f(); //15

优秀的个人博客,低调大师

JAVA8 MAP新增方法详解

1、compute default V compute(K key,BiFunction<? super K,? super V,? extends V> remappingFunction)Attempts to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping). 尝试通过Lambda表达式重新计算给定KEY的映射值并更新MAP(值为null则删除KEY,否则重新写入)。 Map<String, String> tMap = new HashMap<String, String>() { { put("A", "AAA"); put("B", "BBB"); } }; tMap.compute("A", (k, v) -> v == null ? "AAA" : v.concat("AAA"));//KEY存在VALUE不为空且Lambda计算结果不为空,更新KEY System.out.println(tMap); tMap.compute("B", (k, v) -> v == null ? "BBB" : null);//KEY存在VALUE不为空但Lambda计算结果为空,删除KEY System.out.println(tMap); tMap.compute("C", (k, v) -> v == null ? "CCC" : v.concat("CCC"));//KEY不存在但Lambda计算结果不为空,新增KEY System.out.println(tMap); 2、computeIfAbsent default V computeIfAbsent(K key,Function<? super K,? extends V> mappingFunction) If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null. 如果给定的KEY为关联VALUE或关联到null,则尝试通过给定的Lambda函数计算其值并写入MAP(值为null则不写入)。 Map<String,String> map = new HashMap<>(); map.computeIfAbsent("A",k -> null); System.out.println(map); map.computeIfAbsent("B",k -> "BBB"); System.out.println(map); 3、computeIfPresent default V computeIfPresent(K key,BiFunction<? super K,? super V,? extends V> remappingFunction) If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value.如果给定KEY存在映射值且非null,尝试通过Lambda表达式计算新值并更新MAP If the function returns null, the mapping is removed. If the function itself throws an (unchecked) exception, the exception is rethrown, and the current mapping is left unchanged.如果Lambda计算结果为null,则删除KEY。如果Lambda计算发生异常,则原映射关系不变。 Map<String, String> tMap = new HashMap<String, String>() { { put("A", "AAA"); put("B", "BBB"); } }; tMap.computeIfPresent("A", (k, v) -> v == null ? "AAA" : v.concat("AAA"));//Lambda计算结果不为空,更新KEY System.out.println(tMap); tMap.computeIfPresent("B", (k, v) -> v == null ? "BBB" : null);//Lambda计算结果为空,删除KEY System.out.println(tMap);

优秀的个人博客,低调大师

Python的抽象方法实现的简洁方式

一个小的疑问: 全局函数的第一个参数可以为self么?全局函数可以作为成员函数使用么?下面是编程中碰见的一个语法现象,Python的面向对象的底层实现不是那么简单的。 一、来自scrapy框架的数据项加载器处理器代码 -- coding: utf-8 -- import scrapyimport scrapy.loaderfrom scrapy.loader.processors import Join, MapCompose, TakeFirst class TencentItemSpider(scrapy.Spider): name = 'tencent_item' allowed_domains = ['ke.qq.com'] start_urls = ['https://ke.qq.com/course/list?mt=1001&st=2002&tt=3019&price_min=1&page=1'] def parse(self, response): item = JobscrapyItem() # loader = scrapy.loader.ItemLoader(item=item,selector=response.selector) # loader = scrapy.loader.ItemLoader(item=item, response=response) # 测试xpath的代码 # price = response.xpath('/html/body//section/div/div/ul/li/div/span[@class="line-cell item-price"]/text()') # print('self:', len(price), price.getall()) # company_name = response.xpath('/html/body//section/div/div/ul/li/div/span/a/text()') # print('self:', len(company_name), company_name.getall()) course_list = response.xpath('/html/body//section[@class="main autoM clearfix"]/div/div/ul/li') print(len(course_list)) for course_ in course_list: # loader = scrapy.loader.ItemLoader(item=item, selector=course_) loader = CourseItemLoader(item=item, selector=course_) loader.add_xpath('company_name', 'div/span/a/text()') loader.add_xpath('course_price', 'div/span[@class="line-cell item-price"]/text()') re = loader.get_xpath('div/span[@class="line-cell item-price"]/text()') # print(re) yield loader.load_item() def in_price_processor(value): print(float(value[0][1:])) # print(value) # 删除¥符号,转换为float类型 return float(value[0][1:]) def out_price_processor(value): print(value) # 删除¥符号,转换为float类型 return value[0] + 100 class JobscrapyItem(scrapy.Item): # 培训公司名 company_name = scrapy.Field() # 课程价格 course_price = scrapy.Field( # input_processor=in_price_processor, # output_processor = out_price_processor ) -----------------------重点关注这个全局函数的self参数 def price_processor(self, value): print(self) # 输出的类型是CourseItemLoader print(float(value[0][1:])) # print(value) # 删除¥符号,转换为float类型 return float(value[0][1:]) class CourseItemLoader(scrapy.loader.ItemLoader): course_price_in = price_processor # 这个函数被调用。 # course_price_out = price_processor 二、Python的接口编程实现技巧从上面代码可以得到一种类似抽象接口实现的编程技巧;尽管传统使用的是抛出实现异常机制,我觉得这种编程思路也不错(传统异常方式稳定性,逻辑性更加好点),可以实现类的定义与成员实现的分离,达到程序设计的低耦合实现,在此备忘一下代码。 class A: meth = None def meth(self, param): print(param) class B(A): meth = meth b = B()b.meth('hello')

优秀的个人博客,低调大师

pyppeteer最为核心类Page的接口方法

重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! 重要:因为同步公号的文章格式很难保证,所以后面文章选择性在其他平台同步,欢迎移步公众号(Python之战),每日更新原汁原味! Page类是pyppeteer的核心,其价值就犹如selenium的driver,具体的页面操作都在Page类上;Page与driver比较最具优势的是和js的交互,可以修改本地js、css,也可以给页面添加js函数,甚至添加自定义函数到浏览器的windows属性中,也有js拦截相关的设置,更有终端模拟设置,这些功能是比driver更为强大的功能,但是也有一些劣势如页面超时方面比driver弱、选择器不简洁等问题。 页面类:Page 基类:pyee.EventEmitter 此类提供了与

优秀的个人博客,低调大师

删除vSAN中不可访问对象的方法

vSAN是VMware推出的用于vSphere系列产品、为虚拟环境优化的分布式可容错的存储系统。vSAN是VMware对ESXi主机本地存储设备(包括SSD与HDD)进行集中管理、空间分配使用的一种方式或一种新的技术。现在一些vSphere数据中心已经使用vSAN组成的分布式存储代替传统、专业的共享存储并获得了更好的性能。在使用vSAN存储的过程中,可能会出现一些“不可访问”的对象。虽然这些“不可访问”的对象对虚拟机的正常运行不会造成影响,但因为有“不可访问”对象存在,在正常的vSAN维护中或vSAN磁盘模式升级中,这些“不可访问”的对象不能迁移到其他主机会导致进入维护模式或升级vSAN磁盘格式失败。如果要解决这个问题,就需要强制删除这些“不可访问”的对象。下面通过具体的实例进行介绍。 (1)某4台ESXi主机组成的标准vSAN群集,在“监控→vSAN→运行状况”的“数据→vSAN对象运行状况”中有“不可访问”的对象,如图1-1所示。单击“立即修复对象”按钮无法修复。 图1-1 vSAN对象运行状况检查到不可访问对象 (2)这4台主机原来运行的是vSphere 6.7.0,vSAN磁盘格式是6.0版本,如图1-2所示。 图1-2 查看当前vSAN磁盘格式 (3)在将vSphere 6.7.0 升级到了6.7.0 U1(这包括了vCenter Server与4台ESXi主机的升级)后,准备升级vSAN磁盘格式。在“配置→vSAN→常规”中的“磁盘格式版本”中单击“预检查升级”按钮,预检查完成后出现错误,单击“详细信息”,如图1-3所示。 图1-3 预检查升级 (4)在“vSAN群集-升级预检查问题”提示“无法升级群集,对象……”,在此对话框中显示了无法访问的对象。如图1-4所示。用鼠标选中“无法升级群集,对象……”这些信息右键用鼠标右键单击复制这些信息并将信息保存在“记事本”中备用。 图1-4 vSAN中无法访问的对象 【说明】在图1-4中的信息为: 无法升级群集: 对象 db6f235b-b856-89dd-6324-0010181a9981, 6238115c-0828-2cc6-3dd3-b8aeedb7689f, c19a245b-f031-9b4f-9b10-b8aeedb7689f 在 vSAN 中无法访问。 (5)使用SSH客户端软件(例如xShell)登录到其中一台ESXi主机(需要在这台主机启动SSH服务),在登录到shell界面后,先执行cd /vmfs/volumes/vsanDatastore命令进入vSAN数据存储,然后使用objtool命令依次删除图1-4中无法访问的对象(记录对象的UUID)。 objtool在/usr/lib/vmware/osfs/bin/目录中,在图1-4中有3个不可访问的对象,其UID依次为: db6f235b-b856-89dd-6324-0010181a9981 6238115c-0828-2cc6-3dd3-b8aeedb7689f c19a245b-f031-9b4f-9b10-b8aeedb7689f 则在SSH中依次执行如下的命令(在vSAN数据存储根目录下): /usr/lib/vmware/osfs/bin/objtool delete -f -u db6f235b-b856-89dd-6324-0010181a9981 /usr/lib/vmware/osfs/bin/objtool delete -f -u 6238115c-0828-2cc6-3dd3-b8aeedb7689f /usr/lib/vmware/osfs/bin/objtool delete -f -u c19a245b-f031-9b4f-9b10-b8aeedb7689f 如图1-5所示。 图1-5 删除不可访问的对象 (6)在删除不可访问的对象后,在“配置→vSAN→常规”中单击“预检查升级”按钮执行升级前的检查,执行完成后提示预检查已成功完成,单击“升级”按钮,如图1-6所示。 图1-6 升级磁盘格式 (7)在“vSAN群集-升级”对话框中单击“是”按钮,如图1-7所示。 图1-7 升级 (8)升级完成后在“磁盘格式版本”中显示“版本7.0上的所有XX个磁盘”,如图1-8所示。 图1-8 升级完成 (8)在“配置 →vSAN→磁盘管理”中可以看到磁盘格式已经升级到7,如图1-9所示。 图1-9 磁盘格式升级完成

优秀的个人博客,低调大师

得到Go程序的汇编代码的方法

有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。 我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码: once.go 1type Once struct { 2 m sync.Mutex 3 done uint32 4} 5func (o *Once) Do(f func()) { 6 if atomic.LoadUint32(&o.done) == 1 { 7 return 8 } 9 o.m.Lock() 10 defer o.m.Unlock() 11 if o.done == 0 { 12

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册