编程的相关知识,内容包括简介、数据类型、控制流程、函数、对象、类、三种编程方式。
一、简介
编程,顾名思义就是编写程序。程序,就是做一件事情或者解决一个问题所采取的一系列固定步骤。
编程语言有许多不同的类型,它们有不同的业务场景。编写程序,目的是让计算机解决某个问题或完成某项功能。我目前学习了 JavaScript 和 Python 两门编程语言,在此特别想总结一下编程相关的一些概念。
二、数据类型
数据(data)是信息的表现形式和载体,是对现实世界实体和概念的抽象。
Python 数据类型
# 基本类型
整数 int 123
浮点数 float 123.456
复数 complex 1123+456j
逻辑值 boolean True / False
字符串 string "Hello word"
————————————————————————————————————————————
空 none
————————————————————————————————————————————
# 容器类型
列表 list [1,2,3]
元组 tuple (1,2,3)
字典 dir {x:"小明", y:"小白",z:"小花"}
集合 set {x,y,z}
JavaScript 数据类型
数字 number 123
逻辑值 boolean True / False
字符串 string "Hello word"
symbol
————————————————————————————
空 null
空 undefined
—————————————————————————————
对象 object
JavaScript 和 Python 都是动态语言,不用提前声明变量的类型。
三、控制流程
几乎所有的程序设计语言都提供了三种控制流程
- 顺序结构:按照语句队列前后顺序来确定下一条将要执行的语句
- 条件分支结构:根据当前情况来选择下一条语句的位置
- 循环结构:周而复始地执行一系列语句
1. 顺序结构
Python
a = 1
c = a + 2
print(c)
JavaScript
let a = 1
let c = a + 2
console.log(c)
2. 条件分支结构
Python
a,b = 1,3
if (a < b):
print("a 小")
else:
print("a 大")
JavaScript
let a = 1
let b = 3
if (a < b){
console.log("a 小")
}
else{
console.log("a 大")
}
3. 循环结构
Python
# 迭代循环
for i in range(1,11):
print(i)
———————————————————————————————
# 条件循环
i = 1
while (i<=10):
print(i)
i += 2
JavaScript
// 迭代循环
for (let i=1,i<=10,i++){
console.log(i)
}
——————————————————————————————
// 条件循环
let i = 1
while (i<=10){
console.log(i)
i +=2
}
四、函数(function)
函数是一种封装。程序中实现明确功能的代码段可以封装成一个函数,以便复用。
1. 定义并调用函数
Python
def add(a,b):
return a + b
add(1,2)
JavaScript
function add(a,b){
return a + b
}
add(3,4)
2. 函数的参数
- 形式参数(parameter):函数创建和定义过程中,函数名后面括号里的参数
- 实际参数(argument):函数在调用过程中传入的参数
Python 定义和调用函数时,参数可以是在参数表中写明参数名的固定参数,也可以是数量不定的可变参数
# 固定了顺序和数量的固定参数
def add(key1,key2=10):
return key1+key2
add(2) # 12
add(2,3) # 5
————————————————————————————————————————
# 不带参数名的多个参数
def f1(*args):
print(args)
for arg in args:
print(arg)
f1(1,2,3) # (1,2,3) 1 2 3
————————————————————————————————————————
# key=value 形式的多个参数
def f1(**kwdargs):
print(kwdargs)
for kwdarg in kwdargs:
print(kwdarg)
f1(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3} a b c
JavaScript 定义和调用函数时,参数的写法更随意,形参甚至可以不写
function f1(){
console.log(arguments) // arguments 是一个伪数组
for (i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
f1(3,4,5) // [3,4,5] 3 4 5
形式参数只是代表一个位置、一个变量名,实际参数是一个具体内容,赋值到变量的值
五. 对象(object)
对象既表示客观世界问题空间中的某个具体事物,又表示软件系统空间中的基本元素。
- 对象 = 属性 + 方法
Python 中的所有事物都是以对象形式存在
- 从简单的数值类型,到复杂的代码模块,都是对象
- 它的对象以id作为标识,既包含数据(属性),也包含代码(方法),是某一类具体事物的特殊实例
id(1) # 查看 id
type(1) # 查看类
dir(1) # 查看属性和方法
id(print) # 2202045845072
type(print) # <class 'builtin_function_or_method'>
dir(print)
JavaScript 中对象是它的数据类型
- 数组和函数是特殊的对象
- 它的对象同样包含属性和方法,是某一类具体事物的特殊实例
- JS 有构造函数的概念
let array = [1,2,3]
console.dir(array) // 查看自身的属性、方法及原型链
六、类(class)
类是对象的模版,封装了对应现实实体的性质和行为
- 实例对象(Instance Objects)是类的具体化
- 把类比作模具,对象则是用模具制造出来的零件
1. 定义并调用类
Python
class Force:
def __init__(self,x,y):
self.fx,self.fy = x,y
def show(self):
print("Force(%s,%s)"%(self.fx,self.fy))
def add(self,x,y):
x += self.fx
y += self.fy
return Force(x,y)
force = Force(1,2)
force.show() # Force(1,2)
force2 = force.add(3,4)
force2.show() # Force(4,6)
JavaScript
// ES6 引入 class 语法
class Square{
constructor(width){
this.width = width
}
getArea(){
return this.width*this.width
}
getLength(){
return this.width*4
}
}
let square = new Square(5)
console.log(square.getArea()) // 25
console.log(square.getLength()) // 20
// JS 风格的语法,在 JS 中定义类就是定义一个构造函数
function Square(width){
this.width = width
}
Square.prototype.getArea = function(){
return this.width*this.widvth
}
Square.prototype.getLength = function(){
return this.width*4
}
let square = new Square(6)
console.log(square.getArea()) // 36
console.log(square.getLength()) // 24
七、三种编程方式
在此举一个简单的例子,要做的需求如下:
- 输入一个正方形的边长
- 输出它的面积和周长
1. 面对过程编程
# Python
width = 5
area = width*width
length = width*4
print("正方形的面积是%d,周长是%d"%(area,length)) # 正方形的面积是25,周长是20
——————————————————————————————————————————————————————————————————————————————
// JavaScript
let width = 6
area = width*width
length = width*4
console.log(`正方形的面积是${area},周长是${length}`) // 正方形的面积是36,周长是24
2. 面对对象编程
# Python
class Square():
def __init__(self,width):
self.width = width
def getAreaLength(self):
area = self.width*self.width
length = self.width*4
print("正方形的面积是%d,周长是%d"%(area,length))
square = Square(5)
square.getAreaLength() # 正方形的面积是25,周长是20
———————————————————————————————————————————————————————
// JavaScript
class Square{
constructor(width){
this.width = width
}
getAreaLength(){
let area = this.width*this.width
let length = this.width*4
console.log(`正方形的面积是${area},周长是${length}`)
}
}
let square = new Square(6)
square.getAreaLength() // 正方形的面积是36,周长是24
3. 面对函数编程
# Python
def getAreaLength(width):
area = width*width
length = width*4
print("正方形的面积是%d,周长是%d"%(area,length))
getAreaLength(5) # 正方形的面积是25,周长是20
————————————————————————————————————————————————————————————
// JavaScript
function getAreaLength(width){
let area = width*width
let length = width*4
console.log(`正方形的面积是${area},周长是${length}`)
}
getAreaLength(6) // 正方形的面积是36,周长是24
「@浪里淘沙的小法师」