Type "a" or "b": a got input: None 我不明白为什么 get_input() 函数返回的是 None,因为它本应只返回 my_var。这个 None 是从哪里来的?...答: 它返回 None 是因为当你递归调用它时: if my_var != "a" and my_var !...没有返回那个值。 因此,尽管递归确实发生了,但返回值却被丢弃了,然后你会从函数末尾退出。...在函数末尾退出意味着 Python 会隐式地返回 None,就像下面这样: >>> def f(x): ......Python3 documentation 因此,除了在 if 语句中调用 get_input() 之外,还需要返回递归调用返回的内容。
它们的执行效果跟直接写 return 语句相比,是完全相同的: 这 4 个例子属于两种类型:一种没有写 return,但是都有隐藏的 return 返回值;一种写了 return,而且实际也有返回值。...不管有没有写 return,它们都会执行 return 的逻辑,而且默认的返回值就是 None。 那么,问题来了:Python 的函数为什么能默认返回 None 呢?它是如何实现的呢?...答案就在解释器中,当 CPython 解释器执行到函数的最后一个代码块时,若发现没有返回值,它就会主动地加上一个 Py_None 值返回(出自:compile.c): 也就是说,如果定义的函数没有返回值...,Python 解释器就会(强行地)默认给我们注入一段返回逻辑!...那么,这就会引出新的问题:Python 为什么要求函数都要有返回值呢?为什么它不像某些语言那样,提供一个 void 关键字,支持定义无返回值的空函数呢?
) print m None #没有匹配到,返回None(False) search(pattern,string):在字符串中寻找模式 m = re.search('asd','ASDasd') print...m None #没有匹配到,返回None(False) match(pattern,string):在字符串开始处匹配模式 m = re.search('asd','ASDasd') print m...m None #没有匹配到,返回None(False) 等价于 pat=re.compile('a') print pat.match('Aasd') None printpat.match('aASD...('[abc]$') >>> pat.match('adefAbc').group() #match匹配的是字符串开头,所以查找$的时,总是返回None >>> pat.search('adefAbc'...…)” 不匹配…表达式,返回。对后进行匹配 >>> pat=re.compile(r'[A-Za-z]+(?!
#没有匹配到,返回None(False) search(pattern,string):在字符串中寻找模式 1 m = re.search( asd , ASDasd ) 2 3 print m...(True) m = re.search( asd , ASDASD ) print m None #没有匹配到,返回None(False...=…)”:匹配…表达式,返回。对后进行匹配,总是对后面进行匹配 >>> pat=re.compile(r w(?...…)” 不匹配…表达式,返回。对后进行匹配 >>> pat=re.compile(r [A-Za-z]+(?!...<=…)”:匹配…表达式,返回。对前进行匹配,总是对前面进行匹配 >>> pat=re.compile(r (?
pattern = re.compile(r'abc') #定义一个匹配的迭代器变量 matches = pattern.finditer(text_to_search) #finditer()方法:...(r'a$') matches = pattern.finditer(sens) for match in matches: print(match) #什么都不返回,没有匹配到 #匹配text_to_search...#None #www....#使用findall()返回一个列表 pattern = re.compile(r'\d{3}[-.]...如果不匹配,就返回 None my_str = 'Start python,learning python,python end' pattern = re.compile(r'Start') matches
(r'abc', re.I) re.search(pattern, string, flags=0) 扫描整个字符串找到匹配样式的第一个位置,并返回一个相应的匹配对象;如果没有匹配,就返回一个 None...,就返回一个相应的匹配对象;如果没有匹配,就返回 None。...Pattern.search(string[, pos[, endpos]]) 扫描整个 string 寻找第一个匹配的位置,并返回一个相应的匹配对象,如果没有匹配,就返回 None;可选参数 pos...看一下示例: import re pattern = re.compile(r'bc', re.I) print(pattern.search('aBcdef')) print(pattern.search...,如果不匹配,就返回 None。
search(pattern, string, flags=0) 扫描string,如果有个位置可以匹配正则表达式pattern,就返回一个MatchObject的实例,否则返回None sub(pattern...(r'cde', a) # 匹配失败 >>> >>>abc >>>None search(pattern,...string, flags=0) 用于查找字符串中可以匹配成功的子串,如果找到就返回一个Match对象实例,否则返回None。...import re a = 'abcdefg' print re.search(r'bc', a) print re.search(r'bc', a).group() print re.search(...对象对象由re.compile()返回,它带有许多re模块的同名方法,而且方法作用类似一样的。
如果不指定pos,默认是从开头开始匹配,如果匹配不到,直接返回None 举例: import re reg = re.compile(r'(asdf.*)(fasd.*)') a = 'asdfas fasdfds...和search的区别: search有个开始值和一个结束值,但是match也有开始值和结束值,match默认是从开始的位置,如果找不到直接返回None; search默认也是从开始位置匹配,如果刚开始匹配不到...(2)findall(string[, pos[, endpos]]) 搜索string,以列表形式返回全部能匹配的子串. import re p = re.compile(r'\d+') print...import re p = re.compile(r'(\w+) (\w+)') s = 'i say, hello world!'...例子: import re prog = re.compile(r'(?Pabc)(.*)(?
本文介绍re模块的search的用法 复杂匹配 = re.compile(正则表达式): 将正则表达式实例化 + re.search(要匹配的字符串): 从字符串开头...,如果匹配成功,则返回一个Search,否则返回一个None; 第二个参数表示要匹配的字符串; 第三个参数是标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。...想要完全匹配,可以在表达式末尾加上边界匹配符'$' 例如: re.search(‘l’,’hello’)返回值为真; re.search(‘p’,’www.python.org’)返回值为真...方法一: 对象名1 = re.compile(正则表达式) 对象名2 = re.search(对象名1, 要比配的字符串) pattern = r"\d.... = re.search(com_pat, string) if result == None: print("None") else: print("Match:"+result.group
,实现可选匹配; >>> import re >>> batRegex = re.compile(r'Bat(wo)?...可以在文本中出现任意次; >>> import re >>> batRegex = re.compile(r'Bat(wo)*man') >>> mo1 = batRegex.search('The Adventures...>>> mo2 = batRegex.search('The Adventures of Batman') >>> print(mo2 == None) True 花括号:{ },匹配特定次数; >>...> import re >>> batRegex = re.compile(r'ha{3}') >>> mo1 = batRegex.search('hahaha') >>> print(mo1.group...()) hahaha >>> mo2 = batRegex.search('haha') >>> print(mo2 == None) True findall()方法返回结果: 若调用在一个没有分组的正则表达式上
regex对象的search()方法查找传入的字符串,寻找该正则表达式的所有匹配。 如果字符串中没有找到该正则表达式模式,search()方法将返回None。...>> regex = re.compile(r'<....---- # findall() 匹配多个,返回的是列表 regex = re.compile(r'\d+') regex.findall('one1two2three33four4444') ['1'...) >>> print(match) None # 左侧为边界,右侧是空格 >>> regex = re.compile(r'\bdata\b') >>> match = regex.search('...(r'\bdata\b') >>> match = regex.search(' datastudio') >>> print(match) None # 左侧是边界,右侧是符号点 >>> regex
None,如果匹配未结束已经到达string的末尾,也会返回None。...“原生字符串”pattern = re.compile(r'hello') # 使用re.match匹配文本,获得匹配结果,无法匹配时将返回Noneresult1 = re.match(pattern,...同样,search方法的返回对象同样match()返回对象的方法和属性。...我们用一个例子感受一下 12345678 # 将正则表达式编译成Pattern对象pattern = re.compile(r'world')# 使用search()查找匹配的子串,不存在能匹配的子串时将返回...None# 这个例子中使用match()无法成功匹配match = re.search(pattern,'hello world!')
它只匹配一次,也就是说,只要找到一个匹配的结果就返回,而不会返回所有的匹配结果。...print(m3) m4 = re.match(r'[a-z]+', 'Abcde', re.I)#忽略大小写模式 print(m4) print(m4.group()) 输出结果 None <re.Match...区别在于,match函数要完全满足正则表达式才返回,而search函数只需字符串包含正则表达式的子串就认为匹配。...上代码看的清楚一点 import re pattern = re.compile(r'\d+') m1 = pattern.search('one123') print(m1) print(m1.group...无论是否匹配到字符串,findall都会返回一个list对象 举个例子 import re pattern = re.compile(r'\d{2}')#精确匹配2个数字 m1 = pattern.findall
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。 看看例子。...方法 search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下: search(string[, pos...当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。...(r'\d+') # 使用 search() 查找匹配的子串,不存在匹配的子串时将返回 None # 这里使用 match() 无法成功匹配 m = pattern.search...import re print re.match(r'\d+', '123, 123') print re.search(r'\d+', '234, 234') print re.findall
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。 看看例子。...方法 search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下: search(string[, pos[, endpos...当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。...(r'd+') # 使用 search() 查找匹配的子串,不存在匹配的子串时将返回 None # 这里使用 match() 无法成功匹配 m = pattern.search('hello 123456...re.match(r'd+', '123, 123') print re.search(r'd+', '234, 234') print re.findall(r'd+', '345, 345') 如果一个正则表达式需要用到多次
匹配:match match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果,也可用span()方法返回匹配起止下标区间;否则返回None...match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None 搜索:search match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配...= re.compile(r'\s[a-z]{2}') text1 = 'this is a re test' res = pattern.search(text1) print(res) #<re.Match...(r'\s[a-z]{5}') text2 = '是的,this is a re test' print(pattern2.search(text2))#None match和search均用于匹配单个结果...= re.compile(r'\s[a-z]{2,5}') text1 = 'this is a re test' res = pattern.finditer(text1) for r in res
如果中途匹配pattern成功,则终止匹配,返回匹配结果。如果无法匹配或者到字符串末尾还未匹配到,则返回None。...举例: #导入re模块 import re pattern = re.compile(r'python') # 使用re.match匹配文本,获得匹配结果,无法匹配时将返回None result1 =...""" (2) re.search(pattern, string[, flags]) Search函数会扫描整个string字符串查找匹配,存在的话返回匹配结果,不存在则返回None。...举例: import re pattern = re.compile(r'python') #从“hello pythonnnnn!”...举例: import re #以一位或者多位数字作为替换条件 pattern1 = re.compile(r'(\d+)') #用“python”替换数字(一位或者多位),最后返回替换结果和替换次数 print
但递归函数的返回值有时会出现意想不到的情况。 下面来举一个例子: >>> def fun(i): ... i += 1 ... if i < 5: ... ...return i ... >>> r = fun(0) >>> print(r) 比如上面这段代码,乍一看没什么问题,但返回值并不是我们期望的 5,而是 None。...>>> print(r) None 要解决这个问题也简单,就是在执行递归调用的时候,加上 return 语句。 修改之后的代码如下: >>> def fun(i): ... ...return i ... >>> r = fun(0) >>> print(r) 5 现在输出的结果就符合我们的预期了。
领取专属 10元无门槛券
手把手带您无忧上云