01.简单的键盘记录键盘 一个非常简单的键盘记录程序,可捕获击键并将其每秒发送到外部页面.JS和PHP代码在归档中提供的PHP。...发布压缩版本和服务器收集被盗击键:一个Windows二进制和一个Python脚本。这个键盘记录器绝对是JS键盘记录的参考。...03.会话感知键盘记录 感谢设置为cookie的ID的用户会话之后的键盘记录程序。捕获的数据存储在数据库中,其中包含与用户会话相关的信息,源URL等。...29.地理位置 此脚本利用HTML5地理位置功能创建以受害者浏览器位置为中心的Google地图网址。很有趣,但需要用户授权并依靠XHR发送链接(尽管非常容易绕过)。...没有可能与欺骗页面进行交互,但它仍然非常有趣,因为它在HTTPS中显示有效的证书图标… 31.eval()替换 一组不同的方式来执行字符串,而不会明确地调用eval()函数,或者至少不会太明显。
的规则来写,即便是有编程经验的程序员,也容易按照固有的思维和语法格式来写 Python 代码,有一个外国小伙总结了一些大家常犯的错误,16 Common Python Runtime Errors Beginners...,支持用索引获取元素,但它和列表对象不同,字符串是不可变对象,不支持修改。...arguments but 1 was given method1 是 Foo 类的一个成员方法,该方法不接受任何参数,调用 a.method1() 相当于调用 Foo.method1(a),但 method1...不接受任何参数,所以报错了。...正确的调用方式应该是 Foo.method1()。 需要注意的是,以上代码都是基于 Python3 的,在 Python2 中即使是同样的代码出现的错误也不尽一样,尤其是最后一个例子。
因此,刚才我做的那些工作现在就不用做了: >>> f = FooBar() >>> f.init() # 构造方法能让它简化成如下形式: >>> f = FooBar() 在Python中创建一个构造方法很容易...但如果给构造方法传几个参数的话,会有什么情况发生呢?...如果使用了一个非法类型的索引,就会引发TypeError异常,如果索引的类型是正确的但超出了范围(在本例中为负数),则会引发IndexError异常: >>> s["four"] Traceback...实际上,property函数可以用0、1、3或者4个参数来调用。如果没有参数,产生的属性既不可读,也不可写。如果只使用一个参数调用(一个取值方法),产生的属性是只读的。...试着将传入的对象和一个字符串拼接,看看会不会出现TypeError,这是检查一个对象是不是类似于字符串的最简单、最快速的方法(感谢Alex Martelli指出了这个习惯用法和在这里使用的重要性)。
(2 given) 如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型: print(abs('a')) 报错: Traceback...但是,在语法上,返回一个 tuple 可以省略括号,而多个变量可以同时接收一个 tuple,按位置赋给对应的值,所以,Python 的函数返回多值其实就是返回一个 tuple,但写起来更方便。...对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python 的函数定义非常简单,但灵活度却非常大。...:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。...city和job,Python 解释器把这 4 个参数均视为位置参数,但person()函数仅接受 2 个位置参数。
for循环没加‘:’ 上面示例可以看到,针对语法错误,python解析器会输出错误的那一行,并且在最先找到的错误的位置标记了一个箭头。 ...3、try…except…语句 有python编程经验的人会知道,python里用try…except…语句来处理异常情况。 先看个异常处理的示例: ? 看,我们完美地捕捉到了程序中的异常。...try 语句中;如果没有找到处理程序,则它是一个未处理异常,执行将停止并显示如上所示的消息 4、多个except子句 上面的try…except…语句只处理了一种异常,如果我想多匹配几个异常类型,怎么办呢...通过示例可以知道,e输出了异常类型。 也就是说,Exception匹配了所有异常,把异常名称赋给了e。 当然这里不一定非得是e,你可以取任何的变量名,只是约定俗称这样写罢了。...如果说,我想用python打开了一个txt文件,然后读取,写入,最后关闭文件对象。这是一套常规流程,如果我想捕捉代码过程中的异常,又要保证无论是否有异常,最后都必须要关闭文件。
你可以任何顺序指定关键字参数。 可以用关键字传递位置参数。...例如,假设我们有一个执行两数相加的简单函数: def add_numbers(x, y): return x + y 通过这个函数,我们可以派生出一个新的只有一个参数的函数——add_five,...names)) # names is a generator A ['Alan', 'Adam'] W ['Wes', 'Will'] A ['Albert'] S ['Steven'] 表3-2中列出了一些我经常用到的...建议参阅Python官方文档,进一步学习。 错误和异常处理 优雅地处理Python的错误和异常是构建健壮程序的重要部分。在数据分析中,许多函数只用于部分输入。...你可以用魔术命令%xmode,从Plain(与Python标准解释器相同)到Verbose(带有函数的参数值)控制文本显示的数量。
如下: 多任务写成一行 for循环没加‘:’ 上面示例可以看到,针对语法错误,python解析器会输出错误的那一行,并且在最先找到的错误的位置标记了一个箭头。...try 语句中;如果没有找到处理程序,则它是一个 未处理异常,执行将停止并显示如上所示的消息 4、多个except子句 上面的try...except...语句只处理了一种异常,如果我想多匹配几个异常类型...综上,对于多个except子句,可以总结为: 一个 try 语句可能有多个 except 子句,以指定不同异常的处理程序 最多会执行一个处理程序 处理程序只处理相应的 try 子句中发生的异常,而不处理同一...再举个例子: 通过示例可以知道,e输出了异常类型。 也就是说,Exception匹配了所有异常,把异常名称赋给了e。当然这里不一定非得是e,你可以取任何的变量名,只是约定俗称这样写罢了。...如果说,我想用python打开了一个txt文件,然后读取,写入,最后关闭文件对象。这是一套常规流程,如果我想捕捉代码过程中的异常,又要保证无论是否有异常,最后都必须要关闭文件。
第十五章:关于类型提示的更多内容 我学到了一个痛苦的教训,对于小程序来说,动态类型很棒。对于大型程序,你需要更加纪律严明的方法。...因此,.pyi文件是有效的 Python 文件。 正如在“注释位置参数和可变参数”中提到的,__iterable中的两个下划线是 PEP 484 对位置参数的约定,由 Mypy 强制执行。...对我来说,这是一个非常直观的描述。 但如果我必须为以这些术语描述的函数注释,我必须问:它是哪个?一个可迭代对象还是两个或更多参数?...② 糟糕…我忘记了 authors 接受一个列表。但渐进式类型意味着在运行时没有类型检查。...示例 15-13 显示 demo_not_book.py 输出了无意义的内容,但没有运行时错误。在处理 JSON 数据时使用 TypedDict 并没有提供太多类型安全性。
4) # returns 24 最后一次调用将值1赋给参数a,将2赋给参数b,并将arg变量填充为(3,4)。...如何设计函数只接受位置参数。...下面的函数是一个非常极端的例子,说明了如何组合前面讨论的所有技术:它强制前两个参数以位置方式传递,接下来的两个参数可以以位置方式传递,并且带有关键字,然后是两个只有关键字的参数,然后我们用**kwargs...因为python在设计时是一个很宽松的语言,并没有那么多的规范,用的人越多使用方法就越多,就变成了这样。...我们今天介绍的这个例子虽然在看源代码时没有遇到这么复杂的情况,但是在面试的时候还真有人问(虽然我觉得没啥用),所以最好还是知道一些,以免尴尬。
调用函数 调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个: >>> abs(1, 2) Traceback...(2 given) 如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型: >>> abs('a') Traceback (most...但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。 3....函数的参数 >>> power(5, 2) 25 >>> power(5, 3) 125 修改后的power(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数...我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
在这个例子中,我们想要展示一个不同的目录:pypy。我们所做的是指定所谓的位置参数。之所以这样命名,是因为程序仅根据命令行中的位置知道该值的用途。...这个概念和 cp 之类的命令更相关,cp 命令最基本的用法是 cp SRC DEST。第一个位置是你要复制的内容,第二个位置是你要复制到的位置。 现在,假设我们要更改程序的行为。...在我们的示例中,我们为每个文件显示更多偏偏,而不仅仅是显示文件名。在这种情况下,-l被称为可选参数。 这是帮助文本的的一小段。...然而请注意,尽管帮助信息看起来不错,但目前并不是很有用。例如,我们看到了我们将 echo 作为了位置参数,但除了猜测和阅读源代码外,我们不知道它的作用。...位置参数与可选参数的结合 我们的程序变得越来越复杂了: import argparse parser = argparse.ArgumentParser() parser.add_argument("
Python 3.0 于 2008 年首次发布,尽管它已经发布了一段时间,但它引入的许多特性都没有被充分利用,而且相当酷。这里有三个你应该知道的。...仅限关键字参数 Python 3.0 首次引入了仅限关键字参数参数的概念。在这之前,不可能指定一个只通过关键字传递某些参数的 API。这在有许多参数,其中一些参数可能是可选的函数中很有用。...,但使用 nonlocal 关键字使内部函数拥有具有状态的的能力是一个强大的工具。...在 3.0 之前的 Python 版本中,你可能会这样写: year, month, total = row[0], row[1], row[-1] 这是正确的,但它掩盖了格式。...Python 3.0 和它的后期版本已经推出了 12 年多,但是它的一些功能还没有被充分利用。在本系列的下一篇文章中,我将会写另外三个。
demo的时候,给参数b付了一个默认值2,所以在调用demo的时候,可以只给a传递,在函数内部计算的时候就使用的是b的默认值。...过量位置参数使用星号(*)加变量名的形式(*args),在传递多余2个参数的时候,前两个参数分别赋值给了a和b,后面的参数都将整体赋值给args,通过打印可以看出,args是一个元祖类型,所以可以通过遍历将里面的数据取出来使用...107和108这两种调用方式就会出错,值1和2分别赋值给了a和b,后面的c=1和d=2通过kwargs来接受,剩余的3没有形式参数来接受,所以就会报错。...a和b是位置参数,c是默认值参数,args是过量位置参数,kwargs是过量关键字参数。 理解了上面说的几种形式,再来理解混合参数形式应该比较简单,就不做过多的解释。...) TypeError: demo() got multiple values for keyword argument 'a' 上面[126]调用的时候,通过一个元祖包装了2个参数值,1赋值给形参a
本文将讨论Python的函数参数。...4) # returns 24 最后一次调用将值1赋给参数a,将2赋给参数b,并将arg变量填充为(3,4)。...4、如何设计函数只接受位置参数 下面是一个只允许位置参数的函数示例: def the_func(arg1:str, arg2:str, /): print(f'provided {arg1=},...,说明了如何组合前面讨论的所有技术:它强制前两个参数以位置方式传递,接下来的两个参数可以以位置方式传递,并且带有关键字,然后是两个只有关键字的参数,然后我们用**kwargs捕获剩下的未捕获的参数。...因为python在设计时是一个很宽松的语言,并没有那么多的规范,用的人越多使用方法就越多,就变成了这样。
生成器 能以一种一致的方式对序列进行迭代(比如列表中的对象或文件中的行)是Python的一个重要特点。...例如,groupby可以接受任何序列和一个函数。它根据函数的返回值对序列中的连续元素进行分组。...names)) # names is a generator A ['Alan', 'Adam'] W ['Wes', 'Will'] A ['Albert'] S ['Steven'] 表3-2中列出了一些我经常用到的...建议参阅Python官方文档,进一步学习。 ? 错误和异常处理 优雅地处理Python的错误和异常是构建健壮程序的重要部分。在数据分析中,许多函数函数只用于部分输入。...你可以用魔术命令%xmode,从Plain(与Python标准解释器相同)到Verbose(带有函数的参数值)控制文本显示的数量。
"I love 'python'" 2.2.1 字符串的简单运算 下面介绍字符串的简单运算。 title() title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。...大多数编程语言都使用了这个术语,它指出了这样一个事实:小数点可出现在数字的任何位置。 从很大程度上说,使用浮点数时都无需考虑其行为。...位置实参 你调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。...结合使用位置实参和任意数量实参 如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python 先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。...如果你不小心导入了一个与程序文件中其 他东西同名的类,将引发难以诊断的错误。这里之所以介绍这种导入方式,是因为虽然不推荐使 用这种方式,但你可能会在别人编写的代码中见到它。
,而traceback指出了这一点: 1 File "pets.py", line 6, in 2 describe_pet() 3 TypeError: describe_pet...这也 是应该给变量和函数指定描述性名称的另一个原因;如果你这样做了,那么无论对于你,还是可 能使用你编写的代码的其他任何人来说,Python提供的错误消息都将更有帮助。...8.3.1 返回简单值 下面来看一个函数,它接受名和姓并返回整洁的姓名: formatted_name.py 1 def get_formatted_name(first_name, last_name...如果还要指定中间名,就必 须确保它是最后一个实参,这样Python才能正确地将位置实参关联到形参(见4)。...在3处,打印这个返回的值,此时原来的两项文本信息存储在一个字典中: {'first': 'jimi', 'last': 'hendrix'} 这个函数接受简单的文本信息,将其放在一个更合适的数据结构中
这里我将参数命名为deck, position, card,而不是语言参考中的self, key, value,以显示每个 Python 方法都是作为普通函数开始的,将第一个参数命名为self只是一种约定...如果参数不可迭代,调用将立即失败,并显示一个非常清晰的TypeError异常,就在对象初始化时。..._balls) ① 初始化程序接受任何可迭代对象:该参数用于构建一个列表。...有类型的 double 函数 当向更习惯于静态类型语言的程序员介绍 Python 时,我最喜欢的一个例子就是这个简单的double函数: >>> def double(x): ......在基本用例中使用起来很简单,但它是一个强大且复杂的工具,涉及一些 Python 中最先进的动态特性,很少在其他语言中找到。
后面我提到的错误信息等词都表示Traceback。 当你的程序导致异常时,Python 将打印 Traceback 以帮助你知道哪里出错了。...然后,greet 函数接受一个 someone 和一个可选的 greeting,之后调用 print 函数,在 print 中调用 who_to_greet 函数并传入参数 someone。...我们需要往上阅读错误信息,才能确定错误的具体位置。这里我们得知错误代码是 a_list[3]原因是索引3 超出了列表的范围,因为最大就是1(索引下标从0 开始的)。...TypeError 当你的代码试图对一个无法执行此操作的对象执行某些操作时,例如将字符串添加到整数中,以及一开始的例子使用 append 方法给元组添加元素,这些都会引发 TypeError。...括号理面详细的写了你希望解包3个值但实际上只给了2 个。 第二个示例中,错误信息行是解包太多的值。
领取专属 10元无门槛券
手把手带您无忧上云