常见编程语言入门:python3

675 阅读5分钟

本文对python3的基本使用做一下整理,假定有js基础。

概述

python和js一样,都是一种动态类型的语言,不需要编译,分号可选,整体入门门槛较低,不同的是js的语法借鉴的是java,而java又借鉴的c,因此这个系列的语法基本一致,而python中的一些特性,比如以缩进表示代码块、变量不需要声明,会让人感觉不太习惯。

其他需要注意的还有

  • 以井号开头表示单行注释,多行注释上下用''' 或 """
# 第一个注释
# 第二个注释
 
'''
第三注释
第四注释
'''
 
"""
第五注释
第六注释
"""
  • 用缩进表示代码块,同一个代码块中的缩进应一致,而不是像其他语言中可以使用花括号
if True:
    print ("True")
else:
    print ("False")
  • 用input输入,用print输出

数据类型

python中数据类型使用type(var)获取,返回<class typename>,还可以通过isinstance(var,typename)判断是不是某类型,包括子类。

print(type(1))//<class 'int'>
print(isinstance(True,int))//True

数据类型分为以下六种,其中前三种不可变

数字类型

由分为

  • int
    • bool
  • float
  • complex(复数)

bool类型是int的子类,包括True和False,分别是1和0

字符串

print(type('ee'))//<class 'str'>

元组

在小括号中用逗号分隔的元素,一个元素时需要在后面加逗号和字符串类似

print(type((2,)))//<class 'tuple'>

还有一些其他操作

print (tuple[1:3])        # 输出从第二个元素开始到第三个元素
print (tuple[2:])         # 输出从第三个元素开始的所有元素
print (tinytuple * 2)     # 输出两次元组
print (tuple + tinytuple) # 连接元组

列表

类似js中的数组,在中括号中元素用逗号分隔,操作类似元组

print(type([2]))//<class 'list'>

集合

类似js中的Set,元素不重复,在花括号中用逗号分隔或者使用set(),可以将字符串转化为集合
空集合要用后者,因为空的花括号表示字典

print(type({3}))//<class 'set'>

集合之间可以有以下操作

print(a - b)     # ab 的差集
print(a | b)     # ab 的并集
print(a & b)     # ab 的交集
print(a ^ b)     # ab 中不同时存在的元素

字典

类似js中的对象,其中key是不可变类型,且唯一

print(type({3:3}))//<class 'dict'>

运算符

这里只介绍需要js没有的或者其他需要注意的

算术运算符

  • // 取整除,积向下取整

比较运算符

没有===相关

赋值运算符

无另外注意

位运算符

无另外注意

逻辑运算符

与或非分表表示为

  • and
  • or
  • not

成员运算符

操作数1是否在操作数2(包括字符串,列表或元组)中

  • in
  • not in

身份运算符

是否为同一个引用,相当于比较地址,地址可用id()获取,这个地址只读

  • is
  • is not

语句

条件语句

没有switch语法

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

循环语句

循环语句中可以使用continue和break,和js中用法基本一致

  • while
while 判断条件(condition):
    执行语句(statements)……

带else的while

while <expr>:
    <statement(s)>
else:
    <additional_statement(s)>
  • for语句
for <variable> in <sequence>:
    <statements>
else:
    <statements>

其中可以使用range()遍历数字序列

range(5)//0到4
range(5,9) //5到8
range(0, 10, 3) //0到9,步长为3

迭代器和生成器

迭代器

迭代器就是js中的iterator,可以通过iter()将字符串,列表或元组转化为迭代器,使用next进行迭代或轮询

list=[1,2,3,4]
it = iter(list)
print(next(it))//1
for i in it:
    print(i)//1 2 3 4

生成器

生成器就是js中的generator,是一个返回迭代器的函数,在其中使用yield

函数

函数使用def开头,相当于js中的function,后面跟函数名和参数。

def 函数名(参数列表):
    函数体

比如

# 定义函数
def printme( str ):
   # 打印任何传入的字符串
   print (str)
   return
 
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

还可以是匿名函数,即lambda函数

lambda [arg1 [,arg2,.....argn]]:expression

比如

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

可以使用默认参数,不定长参数等

模块

可以使用import module1[, module2[,... moduleN]将整个模块导入,也可以使用from modname import name1[, name2[, ... nameN]]导入一部分

>>> from fibo import fib, fib2//导入模块 fibo 的 fib 函数
>>> fib(500)
1 1 2 3 5 8 13 21 34 55 89 144 233 377

或导入所有

fromimport * 

命名空间和作用域

命名空间

命名空间包括三种

  • 局部local 比如函数或类中的
  • 全局global 模块中的
  • 内置built-in 包含语言内置的名称

作用域

作用域和命名空间对应,其中局部可以嵌套从而分为Local和Enclosing

  • local 最内层
  • enclosing local和global中间
  • global
  • build-in

当在内部作用域修改外部作用域的变量时需要另外的关键字,如果外部作用域是全局作用域global关键字,如果外部作用域是enclosing作用域时使用nonlocal关键字,如果不这样就会在内部作用域重新创建一个变量

o=2
print(o) # 2
def outer():
    num = 10
    print(num) # 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
    inner()
    global o
    o=3
    print(num)# 100
outer() #3
print(o)

class

python中的面向对象是以class为基础的,和c++等类似,其中可以包含属性或方法,实例化时直接调用,不能用new调用.
方法中第一个参数为self,表示实例,构造函数为__init__()
私有方法和属性用两个下划线开头__

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

比如

 
class MyClass:
    """一个简单的类实例"""
    i = 12345
    def f(self):
        return 'hello world'
 
# 实例化类
x = MyClass()
 
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 f 输出为:", x.f())

继承

支持多继承,可以对继承的方法进行重写

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

完结