1、语言特性
- pathon是一个解释型语言:一说解释型语言就会想到运行速度会慢。解释型语言:实在运行的时候翻译成机器语言,编译语言:通过编译器直接成机器语言。java属于解释型语言,java编译后只是生成字节码文件,字节码文件通过jvm翻译成机器语言。解释型语言可以跨平台因为有解释器。
- 面向对象:可以创建类和对象
- 动态数据类型:x=1;x=2;会申请俩个内存单元,内存单元中的数据内容是不变的,Python变量的类型是根据它所指向的内存单元中的数据类型决定的,因此不需要声明,指向什么类型,就是什么类型。c语言中 int x=1;x=2;只会开辟一个内存单元且类型必须是int。
- 适合场景:python是用c写的。可以很方便地嵌入/被嵌入: C/C++/JAVA/shell..等开发语言
为其他应用提供脚本接口、数据分析、网络采集数据、web开发
2、数据类型
- Number(数字) int、float、bool、complex(复数) 不可变对象
- String(字符串) 不可变对象
- List(列表) 可变
- Tuple(元组) 不可变对象
- Set(集合) 可变
- Dictionary(字典) 可变
number 类型重新赋值会新开辟一个存储单元
string 类型 字符串不能改变 str = “bit” str[0] = "a" 报错
list 类型 列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表。可以使用+操作符进行拼接。元素可变 listall =[1,"b",["c","d"]] listall[0] = 2 这样ok。list卸载中括号
tuple 元组跟list一样 元组元素不能修改 元组写在小括号里
set 无序不重复
dictionary 相当于map
python内置数据类型可以进行数据类型转换
3、迭代器
迭代器有两个基本的方法:iter() 和 next()
import sys # 引入 sys 模块
list=[1,2,3,4] it = iter(list) # 创建迭代器对象
while True:
try: print (next(it))
except StopIteration: sys.exit()
生成器mark
import sys
def fibonacci():# 生成器函数 - 斐波那契
a,b = 0,1
while True:
if(b > 20):
return
a,b = b,a+b
yield a,b # yield 函数返回a,b
f = fibonacci()# f 是一个迭代器,由生成器返回生成
while True:
try:
print(next(f))
except StopIteration:
sys.exit()
Python的yield
不但可以返回值,它还可以接收调用者发出的参数
4、函数
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
strings, tuples, 和 numbers 属于值传递 传值后数值不改变(重新在内存中开辟了存储空间类似javaString)
list,dict 属于引用传递
def notChangeNumbers(a):
a = 10
b = 2
notChangeNumbers(b)
print(b)
################################
def changeList(list):
list[1] = 'a'
mylist = ['b',12]
changeList(mylist)
print(mylist)
以下是调用函数时可使用的正式参数类型:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
作用域范围
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内建作用域
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,(只要变量有了作用域内属性了,访问该变量就得遵循规则)
其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ): #返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量. 跟全局变量同名但在局部范围内重新申请的引用
print ("函数内是局部变量 : ", total) return total #调用sum函数
sum( 10, 20 ) #30
print ("函数外是全局变量 : ", total) #0
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
num = 1
def fun1():
global num # 需要使用 global 关键字声明 意思就是使用全部变量声明的num
print(num)
num = 123
print(num)
fun1() #1 123
print(num) #123