@@ -8,15 +8,6 @@ | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | |||||
"execution_count": 1, | |||||
"metadata": {}, | |||||
"outputs": [], | |||||
"source": [ | |||||
"a = 10\n" | |||||
] | |||||
}, | |||||
{ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
@@ -279,7 +270,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"0?这是由于分子和分母都是整数,但是结果是一个浮点数,因此 返回整数值,通过将分子或分母更改为浮点型,可以获得正确的答案。" | |||||
"Python3版本之后,自动讲整数的除法转换成浮点数,这样和人类的直觉比较一致。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1007,7 +998,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -4,14 +4,14 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"# Print 语句" | |||||
"# Print 函数" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"**print** 语句可以用下列不同的方式使用。\n", | |||||
"`print` 是Python内置的一个函数,可以用下列不同的方式使用。\n", | |||||
"\n", | "\n", | ||||
" - print(\"Hello World\")\n", | " - print(\"Hello World\")\n", | ||||
" - print(\"Hello\", <Variable Containing the String>)\n", | " - print(\"Hello\", <Variable Containing the String>)\n", | ||||
@@ -87,7 +87,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"字符串可以分配给变量 _string1_ 和string2,使用print语句时可以调用。" | |||||
"字符串可以分配给变量 _string1_ 和string2,使用`print`语句时可以调用。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -175,7 +175,7 @@ | |||||
" - %x -> Hexadecimal\n", | " - %x -> Hexadecimal\n", | ||||
" - %e -> exponential\n", | " - %e -> exponential\n", | ||||
" \n", | " \n", | ||||
"这可以用于print语句本身内部的转换。" | |||||
"这可以用于`print`函数本身内部的转换。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -579,7 +579,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -591,7 +591,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"。在一个有字符串作为元素的列表中,**max( )** 和 **min( )** 是可以应用的。**max( )** 会返回一个ASCII码最高的元素而最低的元素会在使用**min( )** 返回。注意,每次只考虑每个元素的第一个索引,如果它们的值相同,则考虑第二个索引,依此类推。" | |||||
"在一个有字符串作为元素的列表中,**max( )** 和 **min( )** 可以使用。**max( )** 会返回一个ASCII码最大的元素而最小的元素会在使用**min( )** 返回。注意,每次只考虑每个元素的第一个索引,如果它们的值相同,则考虑第二个索引,依此类推。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1213,7 +1213,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"大多数新的python程序员都会犯这个错误。考虑以下," | |||||
"大多数新的python程序员都会犯这个错误,即对象的赋值和拷贝的差异。考虑以下的例子:" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1292,7 +1292,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"虽然没有对listb执行任何操作,但它也发生了变化。这是因为您将lista的内存空间分配给了listb。那么如何解决这个问题呢?\n", | |||||
"虽然没有对listb执行任何操作,但它也发生了变化。这是因为您将lista、listb指向相同的内存空间。那么如何解决这个问题呢?\n", | |||||
"\n", | "\n", | ||||
"如果您还记得,在切片中我们已经看到parentlist[a:b]从父列表返回一个起始索引a和结束索引b的列表,如果a和b没有被提及,那么默认情况下它会考虑第一个和最后一个元素。我们在这里使用相同的概念。通过这样做,我们将lista的数据作为变量分配给listb。" | "如果您还记得,在切片中我们已经看到parentlist[a:b]从父列表返回一个起始索引a和结束索引b的列表,如果a和b没有被提及,那么默认情况下它会考虑第一个和最后一个元素。我们在这里使用相同的概念。通过这样做,我们将lista的数据作为变量分配给listb。" | ||||
] | ] | ||||
@@ -1366,6 +1366,13 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"还有其他什么方法能够拷贝一个对象到一个新的变量名字?" | |||||
] | |||||
}, | |||||
{ | |||||
"cell_type": "markdown", | |||||
"metadata": {}, | |||||
"source": [ | |||||
"## 2. 元组" | "## 2. 元组" | ||||
] | ] | ||||
}, | }, | ||||
@@ -1373,7 +1380,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"元组与列表相似,但唯一大的区别是列表中的元素可以更改,而元组中的元素不能更改。把元组想象成对特定的东西为True,而对其他任何值都不为True。为了更好地理解,请回忆**divmod()** 函数。" | |||||
"元组与列表相似,但唯一大的区别是列表中的元素可以更改,而元组中的元素不能更改。为了更好地理解,请回忆**divmod()** 函数。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1995,7 +2002,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -1991,7 +1991,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -799,7 +799,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"字典更像数据库,因为在这里您可以用用户定义的字符串索引特定的序列。" | |||||
"字典更像数据库,因为在这里你可以用用户定义的字符串索引特定的序列。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1172,7 +1172,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -685,7 +685,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -11,14 +11,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"在大部分时候,在一个算法中,语句是不断重复的,一次又一次地执行相同的语句是一项乏味的工作,而且会消耗大量的内存,效率不高。这个时候我们就需要函数。" | |||||
] | |||||
}, | |||||
{ | |||||
"cell_type": "markdown", | |||||
"metadata": {}, | |||||
"source": [ | |||||
"这是一个函数的基本语法" | |||||
"在大部分时候,在一个算法中,需要重复执行一组语句,如果每次都重复写出来,不仅乏味而且编程效率比较低,降低程序的可读性。为了将重复的执行抽象出来,可使用函数将一组操作封装成一个整体,给一个名称和参数列表作为可变量的输入。Python中函数的定义为:" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -41,7 +34,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"将上面的语法理解为,定义了一个名为“funcname”的函数,它接受“arg1,arg2,…argN”的论点。函数被记录为“文档字符串”。函数在执行语句后返回一个“值”。" | |||||
"将上面的语法理解为,定义了一个名为“funcname”的函数,它接受“arg1,arg2,…argN”的参数。函数在执行语句后返回一个“值”。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -109,7 +102,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"**firstfunc()** 每一次只打印一个人的消息。我们可以让我们的函数 **firstfunc()** 接受参数,该参数将存储名称然后打印相应地接受名词。为了这样做我们需要像所示的那样在函数内添加一个参数。" | |||||
"**firstfunc()** 每一次只打印一个人的消息。我们可以让我们的函数 **firstfunc()** 接受参数,该参数将存储名称然后打印相应地接受字符串。为了这样做我们需要像所示的那样在函数内添加一个参数。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -734,7 +727,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"这些小函数没有使用任何名称定义,只携带一个表达式,返回其结果。Lambda函数在操作列表时非常方便。这些函数由关键字**lambda**定义,后面跟着变量、冒号和相应的表达式。" | |||||
"程序中有时需要临时使用一个简单的函数,单独定义出来比较费事,为了提高编程效率,Python等很多语言引入了`Lambda`函数,这些Lambda函数没有使用任何名称定义,只携带一个表达式,返回的是函数本身(类似函数指针或者函数对象)。Lambda函数在操作列表时非常方便。这些函数由关键字**lambda**定义,后面跟着变量、冒号和相应的表达式。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -1067,7 +1060,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -11,7 +11,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"Python中的变量、列表、字典等都是对象。不涉及面向对象编程的理论部分,在本教程中对概念进行解释。" | |||||
"Python中的变量、列表、字典等其实都是对象。不涉及面向对象编程的理论部分,在本教程中对概念进行解释。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -114,7 +114,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"大多数类都有一个名为“\\_\\_init\\_\\_”的函数。这些被称为魔术方法。在这个方法中,你基本上初始化了这个类的变量,或者任何适用于这个方法中指定的所有方法的初始化算法。类中的变量称为属性。" | |||||
"大多数类都有一个名为`__init__`的函数。这些被称为魔术方法。在这个方法中,你基本上初始化了这个类的变量,或者任何适用于这个方法中指定的所有方法的初始化算法。类中的变量称为属性。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -123,7 +123,7 @@ | |||||
"source": [ | "source": [ | ||||
"这有助于简化实例的初始化过程。例如,\n", | "这有助于简化实例的初始化过程。例如,\n", | ||||
"\n", | "\n", | ||||
"在不使用魔法方法或被成为构造函数的\\_\\_init\\_\\_ 的情况下,我们必须定义一个**init()** 方法并调用**init()** 函数。" | |||||
"在不使用魔法方法或被成为构造函数的`__init__`的情况下,我们必须定义一个**init()** 方法并调用**init()** 函数。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -152,16 +152,16 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"但是当构造函数被定义后,\\_\\_init\\_\\_被调用,这样初始化实例被创建。" | |||||
"但是当构造函数被定义后,`__init__`被调用,这样初始化实例被创建。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"我们构造我们的\"FirstClass\"去接受两个变量名称和符号。\n", | |||||
"我们构造我们的`FirstClass`去接受两个变量名称和符号。\n", | |||||
"\n", | "\n", | ||||
"我将会在稍后解释\"self\"。" | |||||
"我将会在稍后解释`self`。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -181,7 +181,7 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"现在我们已经定义了一个函数而且添加了\\_\\_init\\_\\_方法。我们可以创建一个名为FirstClass的实例,该实例现在接受两个参数。" | |||||
"现在我们已经定义了一个函数而且添加了`__init__`方法。我们可以创建一个名为FirstClass的实例,该实例现在接受两个参数。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -599,9 +599,9 @@ | |||||
"source": [ | "source": [ | ||||
"就像我们前面看到的全局变量和局部变量一样,即使类也有自己的变量类型。\n", | "就像我们前面看到的全局变量和局部变量一样,即使类也有自己的变量类型。\n", | ||||
"\n", | "\n", | ||||
"类属性:在方法外部定义的属性,适用于所有实例。\n", | |||||
"**类属性**:在方法外部定义的属性,适用于所有实例。\n", | |||||
"\n", | "\n", | ||||
"实例属性:在方法内部定义的属性,只适用于该方法,并且对每个实例都是唯一的。" | |||||
"**实例属性**:在方法内部定义的属性,只适用于该方法,并且对每个实例都是唯一的。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -773,23 +773,23 @@ | |||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"在某些情况下,新类可能具有已定义类以前的所有特征。因此,新类可以“继承”前一个类,并向其添加自己的方法。这称为继承。" | |||||
"在某些情况下,新类需要具有已定义类的所有特征。因此,新类可以“继承”前一个类,并向其添加自己的方法,这称为继承。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "markdown", | "cell_type": "markdown", | ||||
"metadata": {}, | "metadata": {}, | ||||
"source": [ | "source": [ | ||||
"考虑类SoftwareEngineer具有薪水的方法。" | |||||
"考虑类Person类具有薪水的方法。" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 38, | |||||
"execution_count": 2, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [], | "outputs": [], | ||||
"source": [ | "source": [ | ||||
"class SoftwareEngineer:\n", | |||||
"class Person:\n", | |||||
" def __init__(self,name,age):\n", | " def __init__(self,name,age):\n", | ||||
" self.name = name\n", | " self.name = name\n", | ||||
" self.age = age\n", | " self.age = age\n", | ||||
@@ -800,16 +800,16 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 39, | |||||
"execution_count": 3, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [], | "outputs": [], | ||||
"source": [ | "source": [ | ||||
"a = SoftwareEngineer('Kartik',26)" | |||||
"a = Person('Kartik',26)" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 40, | |||||
"execution_count": 4, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | "outputs": [ | ||||
{ | { | ||||
@@ -826,7 +826,7 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 41, | |||||
"execution_count": 5, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | "outputs": [ | ||||
{ | { | ||||
@@ -844,6 +844,7 @@ | |||||
" '__gt__',\n", | " '__gt__',\n", | ||||
" '__hash__',\n", | " '__hash__',\n", | ||||
" '__init__',\n", | " '__init__',\n", | ||||
" '__init_subclass__',\n", | |||||
" '__le__',\n", | " '__le__',\n", | ||||
" '__lt__',\n", | " '__lt__',\n", | ||||
" '__module__',\n", | " '__module__',\n", | ||||
@@ -860,13 +861,13 @@ | |||||
" 'salary']" | " 'salary']" | ||||
] | ] | ||||
}, | }, | ||||
"execution_count": 41, | |||||
"execution_count": 5, | |||||
"metadata": {}, | "metadata": {}, | ||||
"output_type": "execute_result" | "output_type": "execute_result" | ||||
} | } | ||||
], | ], | ||||
"source": [ | "source": [ | ||||
"dir(SoftwareEngineer)" | |||||
"dir(Person)" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
@@ -979,21 +980,9 @@ | |||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 6, | "execution_count": 6, | ||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | |||||
{ | |||||
"ename": "NameError", | |||||
"evalue": "name 'SoftwareEngineer' is not defined", | |||||
"output_type": "error", | |||||
"traceback": [ | |||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |||||
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |||||
"\u001b[0;32m<ipython-input-6-9b78404b36d6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0mArtist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mSoftwareEngineer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0martform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjob\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjob\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"is a\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |||||
"\u001b[0;31mNameError\u001b[0m: name 'SoftwareEngineer' is not defined" | |||||
] | |||||
} | |||||
], | |||||
"outputs": [], | |||||
"source": [ | "source": [ | ||||
"class Artist(SoftwareEngineer):\n", | |||||
"class Artist(Person):\n", | |||||
" def artform(self, job):\n", | " def artform(self, job):\n", | ||||
" self.job = job\n", | " self.job = job\n", | ||||
" print(self.name,\"is a\", self.job)" | " print(self.name,\"is a\", self.job)" | ||||
@@ -1003,19 +992,7 @@ | |||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 7, | "execution_count": 7, | ||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | |||||
{ | |||||
"ename": "NameError", | |||||
"evalue": "name 'Artist' is not defined", | |||||
"output_type": "error", | |||||
"traceback": [ | |||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |||||
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", | |||||
"\u001b[0;32m<ipython-input-7-1c7e054a8f0c>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mArtist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Nishanth'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m21\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |||||
"\u001b[0;31mNameError\u001b[0m: name 'Artist' is not defined" | |||||
] | |||||
} | |||||
], | |||||
"outputs": [], | |||||
"source": [ | "source": [ | ||||
"c = Artist('Nishanth',21)" | "c = Artist('Nishanth',21)" | ||||
] | ] | ||||
@@ -1068,7 +1045,7 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 49, | |||||
"execution_count": 8, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | "outputs": [ | ||||
{ | { | ||||
@@ -1094,11 +1071,11 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 50, | |||||
"execution_count": 9, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [], | "outputs": [], | ||||
"source": [ | "source": [ | ||||
"class Artist(SoftwareEngineer):\n", | |||||
"class Artist(Person):\n", | |||||
" def artform(self, job):\n", | " def artform(self, job):\n", | ||||
" self.job = job\n", | " self.job = job\n", | ||||
" print(self.name,\"is a\", self.job)\n", | " print(self.name,\"is a\", self.job)\n", | ||||
@@ -1146,11 +1123,11 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 56, | |||||
"execution_count": 10, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [], | "outputs": [], | ||||
"source": [ | "source": [ | ||||
"class emptylist:\n", | |||||
"class EmptyList:\n", | |||||
" def __init__(self):\n", | " def __init__(self):\n", | ||||
" self.data = []\n", | " self.data = []\n", | ||||
" def one(self,x):\n", | " def one(self,x):\n", | ||||
@@ -1163,16 +1140,16 @@ | |||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 57, | |||||
"execution_count": 11, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [], | "outputs": [], | ||||
"source": [ | "source": [ | ||||
"xc = emptylist()" | |||||
"xc = EmptyList()" | |||||
] | ] | ||||
}, | }, | ||||
{ | { | ||||
"cell_type": "code", | "cell_type": "code", | ||||
"execution_count": 59, | |||||
"execution_count": 12, | |||||
"metadata": {}, | "metadata": {}, | ||||
"outputs": [ | "outputs": [ | ||||
{ | { | ||||
@@ -1331,7 +1308,7 @@ | |||||
"name": "python", | "name": "python", | ||||
"nbconvert_exporter": "python", | "nbconvert_exporter": "python", | ||||
"pygments_lexer": "ipython3", | "pygments_lexer": "ipython3", | ||||
"version": "3.6.8" | |||||
"version": "3.6.9" | |||||
} | } | ||||
}, | }, | ||||
"nbformat": 4, | "nbformat": 4, | ||||
@@ -1,8 +1,8 @@ | |||||
# 机器学习 | # 机器学习 | ||||
本教程主要讲解机器学习的基本原理与实现,通过本教程的引导来快速学习Python、Python常用库、机器学习的理论知识与实际编程,并学习如何解决实际问题。 | |||||
机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识、实际编程,并学习如何解决实际问题。 | |||||
由于**本课程需要大量的编程练习才能取得比较好的学习效果**,因此需要认真去完成[作业和报告](https://gitee.com/pi-lab/machinelearning_homework),写作业的过程可以查阅网上的资料,但是不能直接照抄,需要自己独立思考并独立写出代码。 | |||||
由于**本课程需要大量的编程练习才能取得比较好的学习效果**,因此需要认真去完成[《机器学习-作业和报告》](https://gitee.com/pi-lab/machinelearning_homework),写作业的过程可以查阅网上的资料,但是不能直接照抄,需要自己独立思考并独立写出代码。 | |||||
 |  | ||||
@@ -69,11 +69,15 @@ | |||||
## 2. 学习的建议 | ## 2. 学习的建议 | ||||
1. 为了更好的学习本课程,需要大家把Python编程的基础能力培养好,这样后续的机器学习方法学习才比较扎实。 | |||||
2. 每个课程前部分是理论基础,然后是代码实现。个人如果想学的更扎实,可以自己把各个方法的代码亲自实现一下。做的过程尽可能自己想解决办法,因为重要的学习目标不是代码本身,而是学会分析问题、解决问题的能力。 | |||||
1. 为了更好的学习本课程,需要大家把Python编程能力培养好,通过做一定数量的练习题、小项目培养Python编程思维,这样后续的机器学习理论与实践才能学的比较扎实。 | |||||
2. 每个课程前半部分是理论基础,后半部分是代码实现。如果想学的更扎实,可以自己把各个方法的代码亲自实现一下。做的过程尽可能自己想解决办法,因为最重要的目标不是代码本身,而是学会分析问题、解决问题的能力。 | |||||
3. **不能直接抄已有的程序,或者抄别人的程序**,如果自己不会要自己去想,去找解决方法,或者去问。如果直接抄别人的代码,这样的练习一点意义都没有。**如果感觉太难,可以做的慢一些,但是坚持自己思考、自己编写练习代码**。。 | |||||
4. **请先遍历一遍所有的文件夹,了解有什么内容,资料**。各个目录里有很多说明文档,如果不会先找找有没有文档,如果找不到合适的文档就去网上找找。通过这个过程锻炼自己搜索文献、资料的能力。 | |||||
5. 本课程的练习题最好使用[Linux](https://gitee.com/pi-lab/learn_programming/blob/master/6_tools/linux)以及Linux下的工具来做。逼迫自己使用[Linux](https://gitee.com/pi-lab/learn_programming/blob/master/6_tools/linux),只有多练、多用才能快速进步。如果实在太难,先在虚拟机里装一个Linux(例如Ubuntu,或者LinuxMint等),先熟悉一下。但是最终需要学会使用Linux。 | |||||
## 3. 其他参考资料 | |||||
## 3. 参考资料 | |||||
* 资料速查 | * 资料速查 | ||||
* [相关学习参考资料汇总](References.md) | * [相关学习参考资料汇总](References.md) | ||||
* [一些速查手册](tips/cheatsheet) | * [一些速查手册](tips/cheatsheet) | ||||
@@ -98,13 +102,12 @@ | |||||
* [Markdown——入门指南](https://www.jianshu.com/p/1e402922ee32) | * [Markdown——入门指南](https://www.jianshu.com/p/1e402922ee32) | ||||
## 4. 相关学习资料参考 | |||||
## 4. 相关学习资料与参考 | |||||
在上述内容学习完成之后,可以进行更进一步机器学习、计算机视觉方面的学习与研究,具体的资料可以参考: | 在上述内容学习完成之后,可以进行更进一步机器学习、计算机视觉方面的学习与研究,具体的资料可以参考: | ||||
1. [《一步一步学编程》](https://gitee.com/pi-lab/learn_programming) | |||||
2. 智能系统实验室-培训教程与作业 | |||||
1. 编程是机器学习研究、实现过程非常重要的能力,编程能力弱则无法快速试错,导致研究进度缓慢;如果编程能力强,则可以快速试错,快速编写实验代码等。强烈建议大家在学习本课程之后或之中,好好把数据结构、算法等基本功锻炼一下。具体的教程可以参考[《一步一步学编程》](https://gitee.com/pi-lab/learn_programming) | |||||
2. 智能系统实验室-培训教程与作业:这个教程是实验室积累的机器学习与计算机视觉方面的教程集合,每个课程介绍基本的原理、编程实现、应用方法等资料,可以作为快速入门的学习材料。 | |||||
- [《智能系统实验室-暑期培训教程》](https://gitee.com/pi-lab/SummerCamp) | - [《智能系统实验室-暑期培训教程》](https://gitee.com/pi-lab/SummerCamp) | ||||
- [《智能系统实验室-暑期培训作业》](https://gitee.com/pi-lab/SummerCampHomework) | - [《智能系统实验室-暑期培训作业》](https://gitee.com/pi-lab/SummerCampHomework) | ||||
3. [《智能系统实验室研究课题》](https://gitee.com/pi-lab/pilab_research_fields) | |||||
4. [《编程代码参考、技巧集合》](https://gitee.com/pi-lab/code_cook) | |||||
- 可以在这个代码、技巧集合中找到某项功能的示例,从而加快自己代码的编写 | |||||
3. [《编程代码参考、技巧集合》](https://gitee.com/pi-lab/code_cook):可以在这个代码、技巧集合中找到某项功能的示例,从而加快自己代码的编写 |
@@ -7,10 +7,14 @@ | |||||
## References | ## References | ||||
* 22 个神经网络结构设计/可视化工具 | |||||
- https://www.toutiao.com/i6836884346155041292/ | |||||
- https://github.com/ashishpatel26/Tools-to-Design-or-Visualize-Architecture-of-Neural-Network | |||||
* CNN 可视化工具 https://m.toutiaocdn.com/group/6822123587156050435 | * CNN 可视化工具 https://m.toutiaocdn.com/group/6822123587156050435 | ||||
- https://poloclub.github.io/cnn-explainer/ | - https://poloclub.github.io/cnn-explainer/ | ||||
- https://github.com/poloclub/cnn-explainer | - https://github.com/poloclub/cnn-explainer | ||||
* 一款图像转卡通的Python项目,超级值得你练手 | * 一款图像转卡通的Python项目,超级值得你练手 | ||||
- https://www.toutiao.com/a6821299115175969287/ | - https://www.toutiao.com/a6821299115175969287/ | ||||
- https://github.com/minivision-ai/photo2cartoon | - https://github.com/minivision-ai/photo2cartoon |
@@ -1,7 +1,7 @@ | |||||
# Pyton技巧 | # Pyton技巧 | ||||
## Python的包管理工具: `pip` | |||||
## 1. Python的包管理工具: `pip` | |||||
由于python是模块化的开发,因此能够能够利用其他人写的现成的包来快速的完成特定的任务。为了加快包的安装,python有很多包管理的工具,其中`pip`是目前使用最多的包管理工具。 | 由于python是模块化的开发,因此能够能够利用其他人写的现成的包来快速的完成特定的任务。为了加快包的安装,python有很多包管理的工具,其中`pip`是目前使用最多的包管理工具。 | ||||
* [pip的安装、使用等](pip.md) | * [pip的安装、使用等](pip.md) | ||||
@@ -9,7 +9,7 @@ | |||||
但是由于直接使用pip去访问国外的网站慢,所以需要设置好pip的镜像,从而加快包的安装 | 但是由于直接使用pip去访问国外的网站慢,所以需要设置好pip的镜像,从而加快包的安装 | ||||
## Python的虚拟环境: `virtualenv` | |||||
## 2. Python的虚拟环境: `virtualenv` | |||||
由于Python可以通过`pip`工具方便的安装包,因此极大的加快了程序编写的速度。但由于公开的包很多,不可避免的带来了包依赖导致的无法安装某些程序的问题。针对这个问题可以使用`docker`来构建一个隔离的环境来安装所需要的包,但有的时候还是希望在本机安装,因此需要使用`virtualenv`工具来安装虚拟的python环境。 | 由于Python可以通过`pip`工具方便的安装包,因此极大的加快了程序编写的速度。但由于公开的包很多,不可避免的带来了包依赖导致的无法安装某些程序的问题。针对这个问题可以使用`docker`来构建一个隔离的环境来安装所需要的包,但有的时候还是希望在本机安装,因此需要使用`virtualenv`工具来安装虚拟的python环境。 | ||||
* [virtualenv的安装、使用](virtualenv.md) | * [virtualenv的安装、使用](virtualenv.md) |