编程的相关知识,内容包括简介、数据类型、控制流程、函数、对象、类、三种编程方式。
一、简介
编程,顾名思义就是编写程序。程序,就是做一件事情或者解决一个问题所采取的一系列固定步骤。
编程语言有许多不同的类型,它们有不同的业务场景。编写程序,目的是让计算机解决某个问题或完成某项功能。我目前学习了 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 = 1c = a + 2print(c)
JavaScript
let a = 1let c = a + 2console.log(c)
2. 条件分支结构
Python
a,b = 1,3if (a < b):print("a 小")else:print("a 大")
JavaScript
let a = 1let b = 3if (a < b){console.log("a 小")}else{console.log("a 大")}
3. 循环结构
Python
# 迭代循环for i in range(1,11):print(i)———————————————————————————————# 条件循环i = 1while (i<=10):print(i)i += 2
JavaScript
// 迭代循环for (let i=1,i<=10,i++){console.log(i)}——————————————————————————————// 条件循环let i = 1while (i<=10){console.log(i)i +=2}
四、函数(function)
函数是一种封装。程序中实现明确功能的代码段可以封装成一个函数,以便复用。
1. 定义并调用函数
Python
def add(a,b):return a + badd(1,2)
JavaScript
function add(a,b){return a + b}add(3,4)
2. 函数的参数
- 形式参数(parameter):函数创建和定义过程中,函数名后面括号里的参数
- 实际参数(argument):函数在调用过程中传入的参数
Python 定义和调用函数时,参数可以是在参数表中写明参数名的固定参数,也可以是数量不定的可变参数
# 固定了顺序和数量的固定参数def add(key1,key2=10):return key1+key2add(2) # 12add(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) # 查看 idtype(1) # 查看类dir(1) # 查看属性和方法id(print) # 2202045845072type(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,ydef show(self):print("Force(%s,%s)"%(self.fx,self.fy))def add(self,x,y):x += self.fxy += self.fyreturn 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()) // 25console.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()) // 36console.log(square.getLength()) // 24
七、三种编程方式
在此举一个简单的例子,要做的需求如下:
- 输入一个正方形的边长
- 输出它的面积和周长
1. 面对过程编程
# Pythonwidth = 5area = width*widthlength = width*4print("正方形的面积是%d,周长是%d"%(area,length)) # 正方形的面积是25,周长是20——————————————————————————————————————————————————————————————————————————————// JavaScriptlet width = 6area = width*widthlength = width*4console.log(`正方形的面积是${area},周长是${length}`) // 正方形的面积是36,周长是24
2. 面对对象编程
# Pythonclass Square():def __init__(self,width):self.width = widthdef getAreaLength(self):area = self.width*self.widthlength = self.width*4print("正方形的面积是%d,周长是%d"%(area,length))square = Square(5)square.getAreaLength() # 正方形的面积是25,周长是20———————————————————————————————————————————————————————// JavaScriptclass Square{constructor(width){this.width = width}getAreaLength(){let area = this.width*this.widthlet length = this.width*4console.log(`正方形的面积是${area},周长是${length}`)}}let square = new Square(6)square.getAreaLength() // 正方形的面积是36,周长是24
3. 面对函数编程
# Pythondef getAreaLength(width):area = width*widthlength = width*4print("正方形的面积是%d,周长是%d"%(area,length))getAreaLength(5) # 正方形的面积是25,周长是20————————————————————————————————————————————————————————————// JavaScriptfunction getAreaLength(width){let area = width*widthlet length = width*4console.log(`正方形的面积是${area},周长是${length}`)}getAreaLength(6) // 正方形的面积是36,周长是24
「@浪里淘沙的小法师」
