所谓工欲善其事,必先利其器。
选择 Python 的理由又是什麽?
那我们得先从语言的特性及优缺点来探讨。
Python 不是爬虫类,跟 Johnson 也没关系。
它,是个直译式、交互式、动态型别、物件导向的程序语言。
那这些特性是什麽意思呢?
直译式语言 (Interpreted language)
首先我们要知道,Python 是一个 High-level programming language,以人类的日常语言为基础的一种程序语言,言下之意,你在 Editor 或 IDE 上写的程序码都是给人看的。所以当我们要让电脑去执行程序码时,必须将这些程序编译成电脑看得懂的语言,而直译式就是我们编译程序码的方式。
直译式怎麽编译呢?就是编译一行,执行一行。
而另一种跟直译式相反的则称为编译式语言 (Compiled language),编译式语言是全部编译完後才会去执行。
交互式程序设计 (Interactive programming)
因为直译器的好处是每次程序更新後它不需要重新编译整个程序。Jupyter 就是 Python 的交互式程序设计的介面,而 VSCode 本身也有支援这种介面,可以参考这边的教学使用。
如图所示,程序可以一行一行的执行,假如遇到前置处理的资料很庞大的时候,不用从头跑一遍,可以只执行後面修改的部分,这样一来就能省下不少时间!
动态型别(Dynamic typing)
让同一个变数在执行时能被赋予不同型别的值。
dynamic = 5
dynamic = "Hello world"
print(dynamic)
输出结果:
但同样的作法在 Java 中就会出现错误(静态型别)
public class Main {
public static void main(String[] args) {
int dynamic;
dynamic = 5;
dynamic = "Hello world";
System.out.println(dynamic);
}
}
输出结果:
物件导向程序设计(Object-oriented programming)
以下是物件导向的简单概述。
所谓物件导向,就是只能透过物件本身所提供的介面 (Interface) 来存取 (Access) 物件内部的属性或者方法。可以分成以下:
覆写(Overriding): 覆盖父类别原本的方法,在子类别中宣告与父类别相同的方法即可覆盖。
class A:
def foo(self):
print("A")
class B(A): # 继承
def foo(self): # Overriding
print("B")
多载(Overloading): 在相同类别中,名称相同,但是参数个数不同,或是参数型态不同,进而执行不同的行为。
这边先以 Java 作为范例:
// Java Overloading Example
public class A {
public int calArea(int x, int y){
return (x + y);
}
public double calArea(double x, double y){
// 同名称,不同型态
return (x + y);
}
public int calArea(int x, int y, int z){
// 同名称,不同参数个数
return (x + y + z);
}
}
那 Python 呢?
# Python Overloading Example
class A:
def foo(self):
print("A")
def foo(self, number): # Overloading
print(number)
a = A()
a.foo()
我们试着呼叫第一个没有任何参数的 function 看看:
可以发现我们呼叫的 foo function 被覆写掉了!为什麽!?
因为 Python 是动态型别的语言,可以接受任何型态的参数,所以对 Python 来说 Overloading 是不太必要的,里面写个 if-else 就能解决了。
难道 Python 就不能做"正规的" Overloading 吗?
可以!但实作上较为复杂,且需要对 Decorator 有基本的了解。想知道更多可以参阅此文章。
前言: 在昨天的内容中我们大致介绍了什麽是SQL以及一些Mysql的用法,那今天的目标就是要来把资...
演算法在程序设计中扮演重要的角色,而演算法和时间复杂度有很大的关联, 时间复杂度本意为程序执行的时间...
Python应用实务 使用urllib.request取得网路资料 urllib模组可以从网路取得资...
DBABootcamp 没有 SA 权限的使用者,要如何管理 SQL Agent Jobs (作业)...
(10/11更)私下有一些朋友反应手机不太能玩,我才想起这个问题,所以有对此demo在长版进行微调...