精华内容
下载资源
问答
  •  如果想通过VLOOKUP函数来实现双条件多条件的查找并返回值,那么,只需要加上IF({1,0}就可以实现。  下面,我们就一起来看看IF({1,0}和VLOOKUP函数的经典结合使用例子吧。  我们要实现的功能是,...

    在Excel中,通过VLOOKUP函数可以查找到数据并返回数据。不仅能跨表查找,同时,更能跨工作薄查找。

      但是,VLOOKUP函数一般情况下,只能实现单条件查找。

      如果想通过VLOOKUP函数来实现双条件或多条件的查找并返回值,那么,只需要加上IF({1,0}就可以实现。

      下面,我们就一起来看看IF({1,0}和VLOOKUP函数的经典结合使用例子吧。

      我们要实现的功能是,根据Sheet1中的产品类型和头数,找到Sheet2中相对应的产品类型和头数,并获取对应的价格,然后自动填充到Sheet1的C列。实现此功能,就涉及到两个条件了,两个条件都必须同时满足。

      如下图,是Sheet1表的数据,三列分别存放的是产品类型、头数和价格。

      上图是一张购买产品的表,其中,购买产品的行数据,可能存在重复。如上图的10头三七,就是重复数据。

      现在,我们再来看第二张表Sheet2。

      上表,是固定好的不存在任何重复数据的产品单价表。因为每种三七头对应的头数是不相同的,如果要找三七头的单价,那么,要求类型是三七头,同时还要对应于头数,这就是条件。

      现在,我们在Sheet1中的A列输入三七头,在B列输入头数,然后,利用公式自动从Sheet2中获取相对应的价格。这样就免去了输入的麻烦。

      公式比较复杂,因为难于理解,先看下图吧,是公式的应用实例。

      下面,将给大家大体介绍公式是如何理解的。比如C2的公式为:

      {=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)}

      请注意,如上的公式是数组公式,输入的方法是,先输入

      =VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE) 之后,再按新Ctrl+Shift+Enter组合键,才会出现大括号。大括号是通过组合键按出的,不是通过键盘输入的。

      公式解释:

      ①VLOOKUP的解释

      VLOOKUP函数,使用中文描述语法,可以这样来理解。

      VLOOKUP(查找值,在哪里找,找到了返回第几列的数据,逻辑值),其中,逻辑值为True或False。

      再对比如上的公式,我们不能发现。

      A2&B2相当于要查找的值。等同于A2和B2两个内容连接起来所构成的结果。所以为A2&B2,理解为A2合上B2的意思。

      IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相当于要查找的数据

      2代表返回第二列的数据。最后一个是False。

      关于VLOOKUP函数的单条件查找的简单应用,您可以参阅文章:http://www.dzwebs.net/3035.html

      ②IF({1,0}的解释

      刚才我们说了,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相当于VLOOKUP函数中的查找数据的范围。

      由于本例子的功能是,根据Sheet1中的A列数据和B列数据,两个条件,去Sheet2中查找首先找到对应的AB两列的数据,如果一致,就返回C列的单价。

      因此,数据查找范围也必须是Sheet2中的AB两列,这样才能被找到,由于查找数据的条件是A2&B2两个单元格的内容,但是此二单元格又是独立的,因此,要想构造查找范围,也必须把Sheet2中的AB两列结合起来,那就构成了Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12;

      Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12:相当于AB两列数据组成一列数据。

      那么,前面的IF({1,0}代表什么意思呢?

      IF({1,0},相当于IF({True,False},用来构造查找范围的数据的。最后的Sheet2!$C$2:$C$12也是数据范围。

      现在,整个IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)区域,就形成了一个数组,里面存放两列数据。

      第一列是Sheet2AB两列数据的结合,第二列数据是Sheet2!$C$2:$C$12。

      公式{=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)}中的数字2,代表的是返回数据区域中的第二列数据。结果刚好就是Sheet2的C列,即第三列。因为在IF({1,0}公式中,Sheet2中的AB两列,已经被合并成为一列了,所以,Sheet2中的第三列C列,自然就成为序列2的列编号了,所以,完整的公式中,红色的2代表的就是要返回第几列的数据。

      上面的完整的公式,我们可以使用如下两种公式来替代:

      =VLOOKUP(A2&B2,CHOOSE({1,2},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)

      =VLOOKUP(A2&B2,IF({TRUE,FALSE},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)

      关于Choose函数的使用示例,您可以参阅此文:http://www.dzwebs.net/3114.html

    展开全文
  • makefile中条件判断与函数

    万次阅读 2016-04-27 20:23:14
    1. 条件判断 1.1 语法 条件表达式的语法为: endif 以及: else endif 其中表示条件关键字,如“ifeq”。这个关键字有四个。 (1)第一个是我们前面所见过的“ifeq”: ifeq (, )  ifeq '' ''...

    1. 条件判断

    1.1 语法
    条件表达式的语法为:
    <conditional-directive>
    <text-if-true>
    endif
    以及:
    <conditional-directive>
    <text-if-true>
    else
    <text-if-false>
    endif
    其中<conditional-directive>表示条件关键字,如“ifeq”。这个关键字有四个。
    (1)第一个是我们前面所见过的“ifeq”:
    ifeq (<arg1>, <arg2> ) 
    ifeq '<arg1>' '<arg2>' 
    ifeq "<arg1>" "<arg2>" 
    ifeq "<arg1>" '<arg2>' 
    ifeq '<arg1>' "<arg2>" 
    比较参数“arg1”和“arg2”的值是否相同。当然,参数中还可以使用make的函数。如:
    ifeq ($(strip $(foo)),)
    <text-if-empty>
    endif
    这个示例中使用了“strip”函数,如果这个函数的返回值是空(Empty),那么<text-if-empty>就生效。
    (2)第二个条件关键字是“ifneq”。语法是:
    ifneq (<arg1>, <arg2> ) 
    ifneq '<arg1>' '<arg2>' 
    ifneq "<arg1>" "<arg2>" 
    ifneq "<arg1>" '<arg2>' 
    ifneq '<arg1>' "<arg2>" 
    其比较参数“arg1”和“arg2”的值是否相同,如果不同,则为真。和“ifeq”类似。
    (3)第三个条件关键字是“ifdef”。语法是:
    ifdef <variable-name> 
           如果变量<variable-name>的值非空,那到表达式为真。否则,表达式为假。当然,<variable-name>同样可以是一个函数的返回值。注意,ifdef只是测试一个变量是否有值,其并不会把变量扩展到当前位置。还是来看两个例子:
    示例一:
    bar =
    foo = $(bar)
    ifdef foo
    frobozz = yes
    else
    frobozz = no
    endif

    示例二:
    foo =
    ifdef foo
    frobozz = yes
    else
    frobozz = no
    endif
    第一个例子中,“$(frobozz)”值是“yes”,第二个则是“no”。
    (4)第四个条件关键字是“ifndef”。其语法是:
    ifndef <variable-name>
    和“ifdef”是相反的意思。

           在<conditional-directive>这一行上,多余的空格是被允许的,但是不能以[Tab]键做为开始(不然就被认为是命令)。而注释符“#”同样也是安全的。“else”和“endif”也一样,只要不是以[Tab]键开始就行了。
           特别注意的是,make是在读取Makefile时就计算条件表达式的值,并根据条件表达式的值来选择语句,所以,最好不要把自动化变量(如“$@”等)放入条件表达式中,因为自动化变量是在运行时才有的。
           而且,为了避免混乱,make不允许把整个条件语句分成两部分放在不同的文件中。

    2. 函数

            在Makefile中可以使用函数来处理变量,从而让命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。

    2.1  函数的调用语法
    函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:
    $(<function> <arguments> )
    或是
    ${<function> <arguments>}
            这里,<function>就是函数名,make支持的函数不多。<arguments>是函数的参数,参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。感觉很像一个变量。函数中的参数可以使用变量,为了风格的统一,函数和变量的括号最好一样,如使用“$(subst a,b,$(x))”这样的形式,而不是“$(subst a,b,${x})”的形式。因为统一会更清楚,也会减少一些不必要的麻烦。
    来看一个示例:
    comma:= ,
    empty:=
    space:= $(empty) $(empty)
    foo:= a b c
    bar:= $(subst $(space),$(comma),$(foo))
            在这个示例中,$(comma)的值是一个逗号。$(space)使用了$(empty)定义了一个空格,$(foo)的值是“a b c”,$(bar)的定义用,调用了函数“subst”,这是一个替换函数,这个函数有三个参数,第一个参数是被替换字串,第二个参数是替换字串,第三个参数是替换操作作用的字串。这个函数也就是把$(foo)中的空格替换成逗号,所以$(bar)的值是“a,b,c”。
    2.2  字符串处理函数
    (1)$(subst <from>,<to>,<text> ) 
    名称:字符串替换函数——subst。
    功能:把字串<text>中的<from>字符串替换成<to>。
    返回:函数返回被替换过后的字符串。
    示例:
    $(subst ee,EE,feet on the street),
    把“feet on the street”中的“ee”替换成“EE”,返回结果是“fEEt on the strEEt”。

    (2)$(patsubst <pattern>,<replacement>,<text> ) 
    名称:模式字符串替换函数——patsubst。
    功能:查找<text>中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式<pattern>,如果匹配的话,则以<replacement>替换。这里,<pattern>可以包括通配符“%”,表示任意长度的字串。如果<replacement>中也包含“%”,那么,<replacement>中的这个“%”将是<pattern>中的那个“%”所代表的字串。(可以用“/”来转义,以“/%”来表示真实含义的“%”字符)。
    返回:函数返回被替换过后的字符串。
    示例:
    $(patsubst %.c,%.o,x.c.c bar.c)
    把字串“x.c.c bar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.o bar.o”
    备注:
    这和前面“变量章节”说过的相关知识有点相似。如:
    “$(var:<pattern>=<replacement> )”
    相当于
    “$(patsubst <pattern>,<replacement>,$(var))”,
    而“$(var: <suffix>=<replacement> )”
    则相当于
    “$(patsubst %<suffix>,%<replacement>,$(var))”。
    例如有:objects = foo.o bar.o baz.o,
    那么,“$(objects:.o=.c)”和“$(patsubst %.o,%.c,$(objects))”是一样的。

    (3)$(strip <string> )
    名称:去空格函数——strip。
    功能:去掉<string>字串中开头和结尾的空字符。
    返回:返回被去掉空格的字符串值。
    示例:
    $(strip a b c )
    把字串“a b c ”去到开头和结尾的空格,结果是“a b c”。


    (4)$(findstring <find>,<in> )
    名称:查找字符串函数——findstring。
    功能:在字串<in>中查找<find>字串。
    返回:如果找到,那么返回<find>,否则返回空字符串。
    示例:
    $(findstring a,a b c)
    $(findstring a,b c)
    第一个函数返回“a”字符串,第二个返回“”字符串(空字符串)

    (5)$(filter <pattern...>,<text> )
    名称:过滤函数——filter。
    功能:以<pattern>模式过滤<text>字符串中的单词,保留符合模式<pattern>的单词。可以有多个模式。
    返回:返回符合模式<pattern>的字串。
    示例:
    sources := foo.c bar.c baz.s ugh.h
    foo: $(sources)
    cc $(filter %.c %.s,$(sources)) -o foo

    $(filter %.c %.s,$(sources))返回的值是“foo.c bar.c baz.s”。

    (6)$(filter-out <pattern...>,<text> )
    名称:反过滤函数——filter-out。
    功能:以<pattern>模式过滤<text>字符串中的单词,去除符合模式<pattern>的单词。可以有多个模式。
    返回:返回不符合模式<pattern>的字串。
    示例:
    objects=main1.o foo.o main2.o bar.o
    mains=main1.o main2.o

    $(filter-out $(mains),$(objects)) 返回值是“foo.o bar.o”。

    (7)$(sort <list> )
    名称:排序函数——sort。
    功能:给字符串<list>中的单词排序(升序)。
    返回:返回排序后的字符串。
    示例:$(sort foo bar lose)返回“bar foo lose” 。
    备注:sort函数会去掉<list>中相同的单词。

    (8)$(word <n>,<text> )
    名称:取单词函数——word。
    功能:取字符串<text>中第<n>个单词。(从一开始)
    返回:返回字符串<text>中第<n>个单词。如果<n>比<text>中的单词数要大,那么返回空字符串。
    示例:$(word 2, foo bar baz)返回值是“bar”。

    (9)$(wordlist <s>,<e>,<text> ) 
    名称:取单词串函数——wordlist。
    功能:从字符串<text>中取从<s>开始到<e>的单词串。<s>和<e>是一个数字。
    返回:返回字符串<text>中从<s>到<e>的单词字串。如果<s>比<text>中的单词数要大,那么返回空字符串。如果<e>大于<text>的单词数,那么返回从<s>开始,到<text>结束的单词串。
    示例: $(wordlist 2, 3, foo bar baz)返回值是“bar baz”。

    (10)$(words <text> )
    名称:单词个数统计函数——words。
    功能:统计<text>中字符串中的单词个数。
    返回:返回<text>中的单词数。
    示例:$(words, foo bar baz)返回值是“3”。
    备注:如果我们要取<text>中最后的一个单词,我们可以这样:$(word $(words <text> ),<text> )。

    (11)$(firstword <text> )
    名称:首单词函数——firstword。
    功能:取字符串<text>中的第一个单词。
    返回:返回字符串<text>的第一个单词。
    示例:$(firstword foo bar)返回值是“foo”。
    备注:这个函数可以用word函数来实现:$(word 1,<text> )。

            以上是所有的字符串操作函数,如果搭配混合使用,可以完成比较复杂的功能。这里,举一个现实中应用的例子。我们知道,make使用“VPATH”变量来指定“依赖文件”的搜索路径。于是,我们可以利用这个搜索路径来指定编译器对头文件的搜索路径参数CFLAGS,如:
    override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
           如果我们的“$(VPATH)”值是“src:../headers”,那么“$(patsubst %,-I%,$(subst :, ,$(VPATH)))”将返回“-Isrc -I../headers”,这正是cc或gcc搜索头文件路径的参数。

    2.3  文件名操作函数
            下面介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是一系列的文件名来对待。
    (1)$(dir <names...> ) 
    名称:取目录函数——dir。
    功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。
    返回:返回文件名序列<names>的目录部分。
    示例: $(dir src/foo.c hacks)返回值是“src/ ./”。

    (2)$(notdir <names...> ) 
    名称:取文件函数——notdir。
    功能:从文件名序列<names>中取出非目录部分。非目录部分是指最后一个反斜杠(“/”)之后的部分。
    返回:返回文件名序列<names>的非目录部分。
    示例: $(notdir src/foo.c hacks)返回值是“foo.c hacks”。

    (3)$(suffix <names...> ) 
    名称:取后缀函数——suffix。
    功能:从文件名序列<names>中取出各个文件名的后缀。
    返回:返回文件名序列<names>的后缀序列,如果文件没有后缀,则返回空字串。
    示例:$(suffix src/foo.c src-1.0/bar.c hacks)返回值是“.c .c”。

    (4)$(basename <names...> )
    名称:取前缀函数——basename。
    功能:从文件名序列<names>中取出各个文件名的前缀部分。
    返回:返回文件名序列<names>的前缀序列,如果文件没有前缀,则返回空字串。
    示例:$(basename src/foo.c src-1.0/bar.c hacks)返回值是“src/foo src-1.0/bar hacks”。

    (5)$(addsuffix <suffix>,<names...> ) 
    名称:加后缀函数——addsuffix。
    功能:把后缀<suffix>加到<names>中的每个单词后面。
    返回:返回加过后缀的文件名序列。
    示例:$(addsuffix .c,foo bar)返回值是“foo.c bar.c”。

    (6)$(addprefix <prefix>,<names...> ) 
    名称:加前缀函数——addprefix。
    功能:把前缀<prefix>加到<names>中的每个单词后面。
    返回:返回加过前缀的文件名序列。
    示例:$(addprefix src/,foo bar)返回值是“src/foo src/bar”。

    (7)$(join <list1>,<list2> )
    名称:连接函数——join。
    功能:把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多,那么,<list1>中的多出来的单词将保持原样。如果<list2>的单词个数要比<list1>多,那么,<list2>多出来的单词将被复制到<list2>中。
    返回:返回连接过后的字符串。
    示例:$(join aaa bbb , 111 222 333)返回值是“aaa111 bbb222 333”。

    2.4  foreach 函数
           foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是:
    $(foreach <var>,<list>,<text> )
            这个函数的意思是,把参数<list>中的单词逐一取出放到参数<var>所指定的变量中,然后再执行<text>所包含的表达式。每一次<text>会返回一个字符串,循环过程中,<text>的所返回的每个字符串会以空格分隔,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。
            所以,<var>最好是一个变量名,<list>可以是一个表达式,而<text>中一般会使用<var>这个参数来依次枚举<list>中的单词。举个例子:
    names := a b c d

    files := $(foreach n,$(names),$(n).o)
    上面的例子中,$(name)中的单词会被挨个取出,并存到变量“n”中,“$(n).o”每次根据“$(n)”计算出一个值,这些值以空格分隔,最后作为foreach函数的返回,所以,$(files)的值是“a.o b.o c.o d.o”。
           注意,foreach中的<var>参数是一个临时的局部变量,foreach函数执行完后,参数<var>的变量将不在作用,其作用域只在foreach函数当中。

    2.5 if 函数
           if函数很像GNU的make所支持的条件语句——ifeq(参见前面所述的章节),if函数的语法是:
    $(if <condition>,<then-part> ) 
    或是
    $(if <condition>,<then-part>,<else-part> )
           可见,if函数可以包含“else”部分,或是不含。即if函数的参数可以是两个,也可以是三个。<condition>参数是if的表达式,如果其返回的为非空字符串,那么这个表达式就相当于返回真,于是,<then-part>会被计算,否则<else-part>会被计算。
            而if函数的返回值是,如果<condition>为真(非空字符串),那个<then-part>会是整个函数的返回值,如果<condition>为假(空字符串),那么<else-part>会是整个函数的返回值,此时如果<else-part>没有被定义,那么,整个函数返回空字串。
    所以,<then-part>和<else-part>只会有一个被计算。
    2.6  call函数
           call函数是唯一一个可以用来创建新的参数化的函数。你可以写一个非常复杂的表达式,这个表达式中,可以定义许多参数,然后可以用call函数来向这个表达式传递参数。其语法是:
    $(call <expression>,<parm1>,<parm2>,<parm3>...)
            当make执行这个函数时,<expression>参数中的变量,如$(1),$(2),$(3)等,会被参数<parm1>,<parm2>,<parm3>依次取代。而<expression>的返回值就是call函数的返回值。

    例如:
    reverse = $(1) $(2)
    foo = $(call reverse,a,b)
    那么,foo的值就是“a b”。当然,参数的次序是可以自定义的,不一定是顺序的,如:
    reverse = $(2) $(1)
    foo = $(call reverse,a,b)
    此时的foo的值就是“b a”。
    2.7  origin函数
           origin函数不像其它的函数,他并不操作变量的值,他只是告诉你你的这个变量是哪里来的。其语法是:
    $(origin <variable> )
           注意,<variable>是变量的名字,不应该是引用。所以最好不要在<variable>中使用“$”字符。Origin函数会以其返回值来告诉你这个变量的“出生情况”,下面,是origin函数的返回值:
    “undefined”
    如果<variable>从来没有定义过,origin函数返回这个值“undefined”。


    “default”
    如果<variable>是一个默认的定义,比如“CC”这个变量,这种变量我们将在后面讲述。


    “environment”
    如果<variable>是一个环境变量,并且当Makefile被执行时,“-e”参数没有被打开。


    “file”
    如果<variable>这个变量被定义在Makefile中。


    “command line”
    如果<variable>这个变量是被命令行定义的。


    “override”
    如果<variable>是被override指示符重新定义的。


    “automatic”
    如果<variable>是一个命令运行中的自动化变量。关于自动化变量将在后面讲述。
            这些信息对于我们编写Makefile是非常有用的,例如,假设我们有一个Makefile其包了一个定义文件Make.def,在Make.def中定义了一个变量“bletch”,而我们的环境中也有一个环境变量“bletch”,此时,我们想判断一下,如果变量来源于环境,那么我们就把之重定义了,如果来源于Make.def或是命令行等非环境的,那么我们就不重新定义它。于是,在我们的Makefile中,我们可以这样写:
    ifdef bletch
    ifeq "$(origin bletch)" "environment"
    bletch = barf, gag, etc.
    endif
    endif
            当然用override是可以达到这样的效果,可是override过于粗暴,它同时会把从命令行定义的变量也覆盖了,而我们只想重新定义环境传来的,而不想重新定义命令行传来的。
    2.8 shell函数
          shell函数也不像其它的函数。顾名思义,它的参数应该就是操作系统Shell的命令。它和反引号“`”是相同的功能。这就是说,shell函数把执行操作系统命令后的输出作为函数返回。于是,我们可以用操作系统命令以及字符串处理命令awk,sed等等命令来生成一个变量,如:
    contents := $(shell cat foo)
    files := $(shell echo *.c)
            注意,这个函数会新生成一个Shell程序来执行命令,所以你要注意其运行性能,如果你的Makefile中有一些比较复杂的规则,并大量使用了这个函数,那么对于你的系统性能是有害的。特别是Makefile的隐晦的规则可能会让你的shell函数执行的次数比你想像的多得多。
    2.9  控制make的函数
           make提供了一些函数来控制make的运行。通常,你需要检测一些运行Makefile时的运行时信息,并且根据这些信息来决定,你是让make继续执行,还是停止。
    (1)$(error <text ...> )
           产生一个致命的错误,<text ...>是错误信息。注意,error函数不会在一被使用就会产生错误信息,所以如果你把其定义在某个变量中,并在后续的脚本中使用这个变量,那么也是可以的。例如:
    示例一:
    ifdef ERROR_001
    $(error error is $(ERROR_001))
    endif

    示例二:
    ERR = $(error found an error!)
    .PHONY: err
    err: ; $(ERR)
    示例一会在变量ERROR_001定义了后执行时产生error调用,而示例二则在目录err被执行时才发生error调用。

    (2)$(warning <text ...> )
         这个函数很像error函数,只是它并不会让make退出,只是输出一段警告信息,而make继续执行。


    展开全文
  • 如果想通过VLOOKUP函数来实现双条件查找或多条件的查找并返回值,那么,只需要加上IF({1,0}就可以实现。 下面,就一起来看看IF({1,0}和VLOOKUP函数的经典结合使用例子吧。 要实现的功能是,根据Shee
    
    在Excel中,通过VLOOKUP函数可以查找到数据并返回数据。不仅能跨表查找,同时,更能跨工作薄查找。

    但是,VLOOKUP函数一般情况下,只能实现单条件查找。

    如果想通过VLOOKUP函数来实现双条件查找或多条件的查找并返回值,那么,只需要加上IF({1,0}就可以实现。

    下面,就一起来看看IF({1,0}和VLOOKUP函数的经典结合使用例子吧。

    要实现的功能是,根据Sheet1中的产品类型和头数,找到Sheet2中相对应的产品类型和头数,并获取对应的价格,然后自动填充到Sheet1的C列。实现此功能,就涉及到两个条件了,两个条件都必须同时满足。

    如下图,是Sheet1表的数据,三列分别存放的是产品类型、头数和价格。

    通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法

    上图是一张购买产品的表,其中,购买产品的行数据,可能存在重复。如上图的10头三七,就是重复数据。

    现在,再来看第二张表Sheet2。

    通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法

    上表,是固定好的不存在任何重复数据的产品单价表。因为每种三七头对应的头数是不相同的,如果要找三七头的单价,那么,要求类型是三七头,同时还要对应于头数,这就是条件。

    现在,我们在Sheet1中的A列输入三七头,在B列输入头数,然后,利用公式自动从Sheet2中获取相对应的价格。这样就免去了输入的麻烦。

    公式比较复杂,因为难于理解,先看下图吧,是公式的应用实例。

    通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找的方法

    下面,将给大家大体介绍公式是如何理解的。比如C2的公式为:

    {=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)}

    请注意,如上的公式是数组公式,输入的方法是,先输入

    =VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE) 之后,再按新Ctrl+Shift+Enter组合键,才会出现大括号。大括号是通过组合键按出的,不是通过键盘输入的。

    公式解释:

    ①VLOOKUP的解释

    VLOOKUP函数,使用中文描述语法,可以这样来理解。

    VLOOKUP(查找值,在哪里找,找到了返回第几列的数据,逻辑值),其中,逻辑值为True或False。

    再对比如上的公式,不能发现。

    A2&B2相当于要查找的值。等同于A2和B2两个内容连接起来所构成的结果。所以为A2&B2,理解为A2合上B2的意思。

    IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相当于要查找的数据

    2代表返回第二列的数据。最后一个是False。

    关于VLOOKUP函数的单条件查找的简单应用,您可以参阅文章:

    使用VLOOKUP函数单条件查找的方法

    http://www.officezhushou.com/vlookup/5524.html

    ②IF({1,0}的解释

    IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)相当于VLOOKUP函数中的查找数据的范围。

    由于本例子的功能是,根据Sheet1中的A列数据和B列数据,两个条件,去Sheet2中查找首先找到对应的AB两列的数据,如果一致,就返回C列的单价。

    因此,数据查找范围也必须是Sheet2中的AB两列,这样才能被找到,由于查找数据的条件是A2&B2两个单元格的内容,但是此二单元格又是独立的,因此,要想构造查找范围,也必须把Sheet2中的AB两列结合起来,那就构成了Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12;

    Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12:相当于AB两列数据组成一列数据。

    那么,前面的IF({1,0}代表什么意思呢?

    IF({1,0},相当于IF({True,False},用来构造查找范围的数据的。最后的Sheet2!$C$2:$C$12也是数据范围。

    现在,整个IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12)区域,就形成了一个数组,里面存放两列数据。

    第一列是Sheet2AB两列数据的结合,第二列数据是Sheet2!$C$2:$C$12。

    公式{=VLOOKUP(A2&B2,IF({1,0},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)}中的数字2,代表的是返回数据区域中的第二列数据。结果刚好就是Sheet2的C列,即第三列。因为在IF({1,0}公式中,Sheet2中的AB两列,已经被合并成为一列了,所以,Sheet2中的第三列C列,自然就成为序列2的列编号了,所以,完整的公式中,红色的2代表的就是要返回第几列的数据。

    上面的完整的公式,可以使用如下两种公式来替代:

    =VLOOKUP(A2&B2,CHOOSE({1,2},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)

    =VLOOKUP(A2&B2,IF({TRUE,FALSE},Sheet2!$A$2:$A$12&Sheet2!$B$2:$B$12,Sheet2!$C$2:$C$12),2,FALSE)

    展开全文
  • 注意:由于Python不支持switch语句,所以条件判断,只能用elif来实现,如果判断需要条件需同时判断时,可以: 使用or (或),表示两个条件有一个成立时判断条件成功 使用and (与),表示只有两个条件同时...

    欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。

    Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

    本文参考了作者CSDN的文章,链接如下:

    同时,作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。




    一.条件语句

    在讲诉条件语句之前,需要先补充语句块的知识。语句块并非一种语句,它是在条件为真时执行一次或执行多次的一组语句,在代码前放置空格缩进即可创建语句块。它类似于C、C++、Java等语言的大括号({ })来表示一个语句块的开始和结束。

    在Python中使用冒号(:)来标识语句块的开始,块中每一条语句都有缩进并且缩进量相同,当回退到上一层缩进量时,就表示当前语句块已经结束。 下面开始详细讲解条件语句。

    1.单分支

    单分支语法如下:

    if <condition>:
    	<statement>
    	<statement>
    

    < condition > 是条件表达式,基本格式为< expr >< relop >< expr >;< statement >是语句主体。判断条件如果为真(True)就执行语句,如果为假(False)就跳过语句,执行下一条语句。条件判断通常有布尔表达式(True、False)、关系表达式(>、<、>=、<=、= =、!=)和逻辑运算表达式(and、or、not,其优先级从高到低是not、and、or)等。

    注意:在Python2.x版本中,条件表达式是不强制要求用括号括起来的,但条件表达式后面一定要添加英文冒号字符。

    a = 10
    if a==10:
        print('变量a等于10')
        print(a)
    

    输出结果如下:
    在这里插入图片描述



    2.二分支

    二分支语法如下:

    if <condition>:
    	<statement>
    	<statement>
    else:
    	<statement>
    	<statement>
    

    执行过程如下图所示:

    在这里插入图片描述

    如果条件语句< condition >为真,if后面的语句就被执行,如果为假,则执行else下面的语句块。条件语句的格式为:< expr >< relop >< expr >,其中< expr >为表达式、为关系操作符。例如:a >= 10、b != 5等。

    a = 10
    if a >= 5:
        print('变量a大于等于5')
        print(a)
    else:
        print('变量a小于5')
        print(a)
    

    输出结果如下,由于变量a为10,大于5执行if中的语句。

    在这里插入图片描述



    3.多分支

    if多分支由if-elif-else组成,其中elif相当于else if,同时它可以使用多个if的嵌套。具体语法如下所示:

    if <condition1>:
    	<case1 statements>
    elif<condition2>:
    	<case2 statements>
    elif<condition3>:
    	<case3 statements>
    ...
    else:
    	<default statements>
    

    该语句是顺序评估每个条件,如果当前条件分支为True,则执行对应分支下的语句块,如果没有任何条件成立,则执行else中的语句块,其中else是可以省略的。代码如下:

    num = input("please input:")
    num = int(num)
    print(num)
    if num >= 90:
        print('A Class')
    elif num >= 80:
        print('B Class')
    elif num >= 70:
        print('C Class')
    elif num >=60:
        print('D Class')
    else:
        print('No Pass')
    

    输出值为76,则在80到70之间,成绩为C等级,输出结果如下图所示。

    在这里插入图片描述

    注意:由于Python不支持switch语句,所以多个条件判断,只能用elif来实现,如果判断需要多个条件需同时判断时,可以:

    • 使用or (或),表示两个条件有一个成立时判断条件成功
    • 使用and (与),表示只有两个条件同时成立的情况下,判断条件才成功
    # 判断值是否在小于0或大于10
    num = 10
    if num < 0 or num > 10:    
        print('hello')
    else:
        print('undefine')
    # 输出结果: undefine
    
    
    # 判断值是否在0~5或者10~15之间
    num = 8
    if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):    
        print('hello')
    else:
        print('undefine')
    

    输出结果如下图所示:

    在这里插入图片描述

    当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外and和or的优先级低于>(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。

    同时,你也可以在同一行的位置上使用if条件判断语句,如下实例。但不见大家使用类似的语法,在我们编写项目或实战中,很可能你的代码会供别人学习,有时你只负责其中一部分,良好的代码格式及注释是非常必要的。

    var = 520
    if (var ==520): print("感谢您关注娜璋AI安全之家")
    


    二.循环语句

    Python循环语句主要分为while循环和for循环,它允许我们执行一个语句或语句组多次。

    1.while循环

    while循环语句的基本格式如下:

    while <condition>:
    	<statement>
    else:
    	<statement>
    

    执行流程如下图所示:

    在这里插入图片描述

    条件表达式< condition >如果为真时,则循环体重复执行,直到条件判断为假,循环体终止,如果第一次判断条件就为假,则直接跳出循环执行else语句,注意else语句可以省略,同时冒号(:)开始进入循环体,缩进区分语句块。条件语句condition包括布尔表达式(True、False)、关系表达式(>、<、>=、<=、= =、!=)和逻辑运算表达式(and、or、not)等。

    案例1:1+2+…+100

    i = 1  
    s = 0  
    while i <= 100:  
        s = s+i  
        i = i+1  
    else:  
        print('over')
    print('sum = ', s)
    

    这段代码是作者写博客或授课时,讲述循环语句最常用的例子,求1+2+3+…+100的结果,答案是5050。该段代码反复执行“i<=100”判断,当i加到101时,判断i>100为假则结束循环执行else语句。

    在这里插入图片描述


    案例2:循环打开网站
    再举一个实例,通过定义一个while循环,调用webbrowser库的open_new_tab()函数循环打开百度首页网址,下面代码反复打开了百度首页5次。完整代码如下:

    import webbrowser as web  
    import time  
    import os
    
    i=0  
    while i<5:  
        web.open_new_tab('http://www.baidu.com')  
        i=i+1  
        time.sleep(0.8)  
    else:  
        os.system('taskkill /F /IM iexplore.exe')  
    print('close IE')
    

    代码是调用webbrowser库中open_new_tab()函数打开窗口(百度链接)5次。

    在这里插入图片描述

    最后循环结束执行os.system()操作系统函数,调用taskkill命令结束IE浏览器进程(Iexplore.exe),其他浏览器程序修改为chrome.exe、qq.exe或firefox.exe即可。其中参数“/F”表示强行终止程序,“/IM”表示图像,如下图所示。

    在这里插入图片描述

    注意:上述代码实现了循环打开某个网站,可以应用于刷取网页浏览量或Web开发测试等功能。比如新浪博客等部分网页打开一次浏览器会计算一次浏览次数,通过上面这段代码可以循环增加阅读量,部分网站又是通过浏览量进行排序的,不妨试试看。作者引入该代码仅为读者了解循环,也为后面的爬虫知识埋下伏笔。


    案例3:奇数和偶数计算
    最后补充一个奇数和偶数计算的案例,其基本流程如下图所示:

    在这里插入图片描述

    代码如下:

    numbers = [12, 37, 5, 42, 8, 3]
    even = []
    odd = []
    while len(numbers) > 0:
        number = numbers.pop()
        if(number % 2 == 0):      #偶数判断
            even.append(number)
        else:
            odd.append(number)
    #输出结果
    print(even)
    print(odd)
    

    输出结果如下:

    [8, 42, 12]
    [3, 5, 37]
    


    2.for循环

    for循环语句的基本格式如下:

    for <var> in <sequence>:
    	<statement>
    	<statement>
    

    流程图如下:

    在这里插入图片描述

    自定义循环变量var遍历sequence序列中的每一个值,每个值执行一次循环的语句块。sequences表示序列,常见类型有list(列表)、tuple(元组)、strings(字符串)和files(文件)。下面的代码是计算1到100的求和,输出三角形星号的示例。

    #元组循环
    tup = (1,2,3,4,5)  
    for n in tup:  
        print(n)  
    else:  
        print('End for\n')
        
    #计算1+2+...+100
    s = 0
    for i in range(101):
        s = s + i
    print('sum =', s)
    
    #输出三角形星号
    for i in range(10):
        print("*"*i)
    

    输出结果如下图所示,循环遍历元组tup变量中的值,依次获取并输出;然后计算1累加到100,range(101)表示依次获取101范围内的100个数字,其累加结果为5050;最后输出星号三角形,print “ * ” * i 代码中,第一个星号表示输出星号字符串,第二个星号是乘法,表示输出5个星号,终输出三角形。打印图形是编程基础,使用Python实现要比C语言容易很多,但原理逻辑是一样的。

    在这里插入图片描述



    3.Break、Continue和Pass语句

    Break和Continue是两个常用的跳出循环语句。

    • Break语句
      跳出最内层while、for循环,在语句块执行过程中终止循环,并且跳出整个循环。
    s = 0
    num = 0
    while num<20:
        num += 1
        s += num
        if s > 100:
            break
    print("The sum is", s)
    # The sum is 105
    

    当求和变量s大于100的时候,进入if判断,执行break跳出循环,最后输出105。


    • Continue语句
      在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
    for num in range(10):
        if num % 2 == 0:
            print("even number:", num)
            continue
        print("number:",num)
    

    输出结果如下,当为偶数的时候continue跳出当前循环,for循环中只输出偶数。

    >>> 
    even number: 0
    number: 1
    even number: 2
    number: 3
    even number: 4
    number: 5
    even number: 6
    number: 7
    even number: 8
    number: 9
    >>> 
    

    • pass语句
      pass语句是空语句,为了保持程序结构的完整性所使用的。
    # 输出 Python 的每个字母
    for letter in 'Python':
       if letter == 'h':
          pass
          print('这是 pass 块')
       print('当前字母 :', letter)
    print("Good bye!")
    

    输出结果如下图所示:

    在这里插入图片描述



    4.嵌套循环

    while基本语法如下:

    while expression:
       while expression:
          statement(s)
       statement(s)
    

    for基本语法如下:

    for iterating_var in sequence:
       for iterating_var in sequence:
          statements(s)
       statements(s)
    

    下面以最简单的冒泡排序算法来补充循环嵌套知识。冒泡排序是最常见到的排序算法,也是很基础的一种排序算法。它的实现思想是:

    • 相邻的两个元素进行比较,然后把较大的元素放到后面(正向排序),在一轮比较完后最大的元素就放在了最后一个位置,像鱼儿在水中吐的气泡在上升的过程中不断变大。
    def bubble_sort(list):
        count = len(list)
        for i in range(count):
            for j in range(i + 1, count):
                if list[i] > list[j]:
                    list[i], list[j] = list[j], list[i]
        return list
    
    #排序算法
    list = [3, 91, 23, 14, 56, 9]
    print("排序前:", list)
    res = bubble_sort(list)
    print("排序后:", res)
    

    输出结果如下:

    在这里插入图片描述

    你可能会疑惑bubble_sort()是什么?其实它是一个自定义函数,下面我们马上讲解。



    三.函数

    当读者需要完成特定功能的语句块时,需要通过调用函数来完成对应的功能。函数分为无参数函数和有参数函数,当函数提供不同的参数时,可以实现对不同数据的处理。下面从自定义函数、系统自带函数、第三方库函数三个方面进行讲解。

    1.自定义函数

    (1) 定义方法
    为了简化编程,提高代码的复用性,可以自定义函数,函数定义如下:

    def funtion_name([para1,para2...paraN]):
    	statement1
        statement2
          ....
        [return value1,value2...valueN]
    

    其中:

    • 定义函数需要使用def关键词
    • function_name表示函数名,后面的冒号(:)不要忘记,并且缩进
    • [para1,para2…paraN]表示参数,可以省略,也可以多个参数
    • [return value1,value2…valueN]表示返回值,可以无返回值,也可以多个返回值
    • 需要注意的是自定义函数有返回值,主调函数就需要接受返回的结果

    函数调用时,形参被赋予真实的参数,然后执行函数体,并在函数结束调用时返回结果。Return语句表示退出函数并返回到函数被调用的地方,返回值传递给调用程序。

    首先来看一个无返回值的求和函数fun1(),代码如下:

    #函数定义
    def fun1(a,b):
        print(a,b)
        c = a + b
        print('sum =',c)
    
    #函数调用
    fun1(3,4)
    # 3 4
    # sum = 7
    

    再来看一个包含多个参数返回的计算器函数fun2(),代码如下,return返回五个结果。

    #函数定义
    def fun2(a,b):  
        print(a,b)
        X = a + b  
        Y = a - b  
        Z = a * b  
        M = a / b  
        N = a ** b  
        return X,Y,Z,M,N
    
    #函数调用
    a,b,c,d,e = fun2(4,3)  
    print('the result are ',a,b,c,d,e)
    re = fun2(2,10)  
    print(re)
    

    输出结果如下,依次返回加法、减法、乘法、除法、幂运算结果。

    >>> 
    4 3
    the result are  7 1 12 1.3333333333333333 64
    2 10
    (12, -8, 20, 0.2, 1024)
    >>> 
    

    (2) 自定义函数参数含预定义
    预设值是在自定义函数基础上,对某些参数赋予预定义值。例如:

    def fun3(a,b,c=10):
        print(a,b,c)
        n = a + b + c
        return n
      
    print('result1 =',fun3(2,3))
    print('result2 =',fun3(2,3,5))
    

    第一次调用a为2,b为3,c为预定义值10,求和输出15;第二次调用修改了预定义值c,赋值为5,求和即为2+3+5=10。

    在这里插入图片描述

    注意:预定义值得参数不能先于无预定义值参数;同时,函数调用时,建议采用一对一赋值,也可以在函数调用中给出具体形参进行赋值,但需要注意的是在函数调用过程中(使用函数时),有预定义值的参数不能先于无预定义值参数被赋值。


    2.常见内部库函数

    Python系统内部提供了一些库函数供大家使用,这里主要介绍最常见的四个库函数,即str字符串库函数、math数据库函数、os操作系统库函数、socket网络套接字库函数。Python常见内部库函数如下:

    在这里插入图片描述

    下面代码是这四个常见内部库函数的具体用法,代码如下:

    # -*- coding:utf-8 -*-
    #字符串库函数
    str1 = "hello world"
    print('计算字符串长度:', len(str1))
    str2 = str1.title()
    print('首字母大写标题转换:', str2)
    str3 = '12ab34ab56ab78ab'
    print('字符串替换:', str3.replace('ab',' '))
    
    #数学库函数
    import math
    print(math.pi)
    num1 = math.cos(math.pi/3)
    print('余弦定律:', num1)
    num2 = pow(2,10)
    print('幂次运算:', num2)
    num3 = math.log10(1000)
    print('求以10为底的对数:', num3)
    
    #操作系统库函数
    import os
    print('输出当前使用平台:', os.name)
    path = os.getcwd()
    print('获取当前工作目录', path)
    os.system('taskkill /F /IM iexplore.exe') #关闭浏览器进程
    
    #网络套接字库函数
    import socket
    ip = socket.gethostbyname('www.baidu.com')
    print('获取百度ip地址', ip)
    

    输出结果如下图所示。

    在这里插入图片描述



    3.第三方库函数

    Python作为一门开源语言,它支持各种第三方提供的开源库供我们使用。其使用第三方函数库时的具体格式为:

    • module_name.method(parametes)

    表示“第三方函数名.方法(参数)”。例如httplib\httplib2库是针对HTTP和HTTPS的客户端协议,使用httplib2库函数之前,如果没有安装httplib2库会报错“ImportError: No module named httplib2”,如图2.18所示。

    在这里插入图片描述

    在Linux环境中,输入命令“easy_install httplib2”可以实现自动安装扩展包,Windows环境下需要安装pip或easy_install工具,再调用命令执行安装。在后续文章会讲解pip安装工具及用法,后面章节也会介绍各种第三方库函数实现数据爬取和分析操作。



    四.总结

    无论如何,作者都希望这篇文章能给您普及一些Python知识,更希望您能跟着我一起写代码,一起进步。如果文章能给您的研究或项目提供一些微不足道的思路和帮助,就更欣慰了。作者最大的期望就是文章中的一些故事、话语、代码或案例对您有所帮助,致那些努力奋斗的人。

    最后,真诚地感谢您关注“娜璋之家”公众号,感谢CSDN这么多年的陪伴,会一直坚持分享,希望我的文章能陪伴你成长,也希望在技术路上不断前行。文章如果对你有帮助、有感悟,就是对我最好的回报,且看且珍惜!2020年8月18日建立的公众号,再次感谢您的关注,也请帮忙宣传下“娜璋之家”,哈哈~初来乍到,还请多多指教。

    在这里插入图片描述

    遗憾,让我们懂得完美。
    逝去,让我们不断前行。
    她夜色中的身姿是那么的美。

    (By:娜璋之家 Eastmount 2020-09-09 夜于武汉 https://blog.csdn.net/Eastmount )

    参考文献如下:
    [1] 作者书籍《Python网络数据爬取及分析从入门到精通》
    [2] 作者博客:https://blog.csdn.net/Eastmount
    [3] https://www.runoob.com/python/python-if-statement.html

    展开全文
  • C++析构函数自动调用问题

    千次阅读 2019-09-12 12:37:56
    首先要明确一点,系统只会自动释放栈内空间,而堆内...当单纯的创建对象的时候,对象存放在栈中,此时在程序块的}后面,系统会自动调用析构函数,释放掉栈空间。 但是,如果创建了指向new来的一块空间的指针的时候...
  • 在程序员没有为类定义默认构造函数的情况下,C++编译器在某些情况下会自动生成默认构造函数。 1.类中包含的其他有默认构造函数的类的对象 例如: Class A { private:  int data; public:  A(); }; A::A()...
  • VLOOKUP是EXCEL最核心的几个函数之一,但是大多数人对其只知道一点皮毛。具体要怎样用好vlookup,可并不是一个容易的事情。...1.基础单条件查询 这是VLOOKUP函数最基本的功能,可以通过函数匹配特定的数据。 举例...
  • 由上可见,任意个线性函数的组合还是线性函数,因此只要隐藏层的输出是线性的,无论多少层,都是和一个隐藏层是一回事,只有在线性回归问题中的输出层才会用到线性激励函数,但是实际上对于回归任务,你完全可以不...
  • C语言线程编程-线程的基本函数

    万次阅读 多人点赞 2017-04-06 22:33:21
    线程操作函数,线程属性控制函数
  • mysql 表分区的几种方式: RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。 LIST分区:类似于按RANGE分区,区别在于...这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。 KEY分区:...
  • 线程相关函数归纳

    千次阅读 2018-10-26 20:13:40
    线程相关函数必备头文件: #include &amp;lt;pthread.h&amp;gt; Linux 的线程是通过用户级的函数库实现的,一般采用 pthread 线程库实现线程的访问和控制。它用第 3 方posix 标准的 pthread,具有良好...
  • c++ 构造函数详解

    万次阅读 多人点赞 2019-05-31 17:20:58
    c++构造函数详解。(构造函数的分类、拷贝构造函数
  • python常用函数总结

    万次阅读 多人点赞 2018-04-23 11:40:49
    print()函数可以同时输出个字符串,用逗号“,”隔开 print(&quot;hello&quot;,&quot;how&quot;,&quot;are&quot;,&quot;you&quot;) print()会依次打印每个字符串,遇到逗号“,
  • MySql常用函数大全讲解

    万次阅读 多人点赞 2015-08-23 22:41:56
    MySQL函数包括数学函数、字符串函数、日期和时间函数条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。例如,字符串连接函数可以很方便的将个字符串连接在一起。在这一...
  • 函数

    千次阅读 2018-06-06 17:15:31
    初识虚函数用virtual关键字说明的函数函数是实现运行时态性基础C++中的虚函数是动态绑定的函数函数必须是非静态的成员函数,虚函数经过派生之后,就可以实现运行过程中的多态。一般成员函数可以是虚函数构造...
  • 进程通信相关函数归纳

    千次阅读 2018-10-23 15:43:53
    线程必备头文件 #include &amp;amp;lt;stdio.h&amp;amp;gt; #include &amp;amp;lt;unistd.h&amp;amp;gt; #include &amp;amp;lt;sys/types.h&amp;amp;gt; #include &amp;amp;lt;...
  • C++——友元函数&内联函数

    千次阅读 2018-12-07 23:55:15
    友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被...
  • 比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的数据然后写入到新的excel文件中,汇总来自个文件的内容到一个excel中等等。 平时在工作中遇到比较繁琐的数据需要写入到excel中,除非excel...
  • MySQL分组函数

    千次阅读 2019-04-19 19:32:48
    分组函数: 作用:用作统计使用,又称为聚合函数或者统计函数或者组函数。 分类: sum() 求和 avg() 求平均值 max() 求最大值 ...以上分组函数都会自动过滤null。 可以实现与distinct组合使用...
  • 从Excel到Python:最常用的36个Pandas函数 关于Excel,你一定用的到的36个Python函数 本文涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入、数据清洗、预处理,以及最常见的数据分类,数据...
  • 本文学习Python函数,包括:函数调用 定义函数 函数的参数 递归函数我们知道圆的面积计算公式为:S = π r*r当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积:r1 = 12.34 ...
  • 函数和代码复用

    万次阅读 多人点赞 2019-06-06 16:31:41
    1、关于递归函数的描述,以下选项中正确的是 A.包含一个循环结构 B.函数比较复杂 C.函数内部包含对本函数的再次调用 D.函数名称作为返回值 答案:D 答案解析:递归函数是指函数内部包含对本函数的再次调用。 ...
  • pandas apply() 函数用法

    万次阅读 多人点赞 2019-08-22 10:00:46
    函数式编程,包括函数式编程思维,当然是一个很复杂的话题,但对今天介绍的 apply() 函数,只需要理解:函数作为一个对象,能作为参数传递给其它参数,并且能作为函数的返回值。 函数作为对象能带来代码风格巨大的...
  • C++ 虚函数函数重载

    千次阅读 2014-07-23 19:34:59
    函数重载 如何讲函数重载: What——函数重载是什么? why——为什么要用函数重载,没有函数重载会怎样? how——举例说明怎么使用函数重载 ***********************************************************...
  • Java函数式编程

    千次阅读 多人点赞 2017-02-26 23:08:52
    摘要: 在Java重构的过程中,巧妙的运用函数式思想能够便捷地去掉重复。函数式编程是声明式的。也就是说,她应该指定“什么要做”而非“怎么做”。这种方式使得我们可以工作更高的抽象层次。而传统的过程式以及面向...
  • 多态,虚函数,纯虚函数

    千次阅读 2016-08-22 14:29:08
    ①多态:多态可以增加其灵活性,小程序凸显不出多态的威力。 1:创建类,定义虚函数 定义: 关键字:virtual 类型 名字(){} 虚函数对于多态具有...所有派生类中具有覆盖关系的同名函数都将自动成为虚函数。 2: 虚
  • 从C++函数返回个值

    万次阅读 2017-06-30 11:42:10
    因为C++没有内置的从函数或方法返回个值的语法,程序员在需要时使用各种技术来模拟之,而自C++11的引入,这个数量进一步提升。在本文里,我想提供我们今天所拥有的从函数返回个值的某些选择的一个概况,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 306,388
精华内容 122,555
关键字:

多条件自动编号函数