学习笔记4:快速掌握一门编程语言
图灵完备
- 理论上讲任何一个编程语言只要是图灵完备的,就可以实现一切可编程工作,比如 php、java、C 语言等。简单判定图灵完备的方法就是看该语言能否模拟出图灵机。
- Linux 的 shell 脚本编程就不是图灵完备的,因此很多通过编程语言完成的事情通过 shell 脚本是无法做到的,类似 HTML 或者 XML 这类标记语言虽然能表达语意,但编写这类标记语言连编程都算不上。
了解编程语言的历史特点以及搞定运行环境
- github 搜索这个语言的开源项目,了解它是用来干嘛的
- 看别人文章博客了解
掌握变量类型
C/C++: 弱类型,静态类型,值类型
Python: 强类型,动态类型,引用类型
- 强类型和弱类型:编译器能否自己识别一个变量是什么类型(int,double等),能就是强类型。按编译器识别方式
- 静态类型和动态类型:静态类型即指声明的时候需要说明他是什么类型,动态类型则可用
var
申明。按程序员声明变量的方式 - 值类型和引用类型:c++里面用int,float,double等声明的为值类型,每个变量在栈里面存储;python和js语言,声明的所有对象都是指针;java既有值类型又有引用类型。判断两个变量是否相等,值用"==",引用类型用"echo"。按使用变量的方式
- 时间日期的实现和使用:能否直接相减得到间隔日期?
- 字符串的实现与种类:C语言的字符数组长度是定长的,无法扩展;c++语可变定长字符串和不可变字符串,字符串常量池使用数据段地址,也就是说将
string a = "hello"
改为string a = "world"
,a的地址改变了,指向了“world”的存储地址。
- 掌握容器类型
- 注意深复制和浅复制:如list b = list a,其实只是把b的地址修改为指向a,那么还是只有一份。
- 序列化和反序列化
- 函数,方法,类,对象
Pyhton 学习
基础
变量
argument 实参
parameter 形参
argc = argument count
argv = argument vector
list 和 tuple
list是可变有序表,tuple是不能修改的lsit,更安全
list 可以用索引来访问,正序从0起,逆序从-1起
list 常用函数:
a = [m, mm, mmm];
a.append(1);
a.pop(); #弹出末尾元素
a.insert(1,a); #a[1]处插入元素“1”
dict 和 set
a = {'a':1,'b':'dd','c':3};
print(a['a']);
a.get('a') #若不存在,返回none
set无重复元素
s = set([1,2,3,3,4])
循环
生成整数序列:range(0,5,2) //从0到4,步长为2
遍历list或者元组:for i in XXX
下面两种写法是一样的效果,上面这种可实现奇数遍历:
x = "abcdefg";
for i in range(len(x)):
print(x[i]);
for i in range(5):
print(i);
x = "abcdefg";
for i in x:
print(i);
输入
单输入:
str = input('请输入:');
_int = int(str);
oj循环输入:
import sys;
while True: #字符串
t = sys.stdin.readline().strip();
if len(t)==0:
break;
_list = [i for in t.split(' ')];
print(_list);
while True: #数字
t = sys.stdin.readline().strip();
if len(t)==0:
break;
_list = [int(i) for in t.split(' ')];
print(_list);
格式化输出:
print("%2d-%02d" % (3,1));
print("%.2f" % 3.1415);
结果:
构建函数
函数参数:默认参数,可变参数,关键字参数
- 默认参数
def init(name, age, grade=7):
print("name = %s, age = %d, grade = %d" % (name, age, grade));
- 可变参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
def calc(nums): # 调用前需要组装list或者tuple
sum = 0
for num in nums:
sum = sum + num;
return sum
a = [1,2,3,4]
print(calc(a))
print(calc([1,2,3,4]))
def _calc(*nums): # 不用组装list或者tuple
sum = 0
for num in nums:
sum = sum + num;
return sum
aa = [1,2,3,4]
print(_calc(*aa)) # 若本来就有list,加个*传进去
print(_calc(1,2,3,4)) # 若没有list,直接传
- 关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
文件操作
f = open("a.txt","w"); #没有a.txt文件则会新建改文件
f = open("a.txt","r"); #没有a.txt文件则会报错
c1 = f.read(5);
c2 = f.readlines();
Java 学习
基础
- 一个java源码内只能定义一个public类型的class,并且class名称和文件名要完全一致;
javac HelloWorld.java
java HelloWorld.class
- java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型。如果用+连接字符串和其他数据类型,会将其他数据类型先自动转型为字符串,再连接。
流程控制
输出
print(); //输出
println(); //输出并换行
printf(); //按c语言用法使用即可
输入
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
String a = scanner.nextLine();
数组操作
新建数组的三种方法:
int []a={1,2,3,4,5};
int []b=new int[] {1,2,3,4,5};
int []c=new int[5];
Arrays类
int a[]={1,2,3,4,5};
System.out.println(Arrays.toString(num));
Arrays.sort(a); //排序