python-基础知识

9次阅读

共计 2817 个字符,预计需要花费 8 分钟才能阅读完成。

python 基础知识

说明:

  1. 当前版本:3.7.0
  2. 所有示例都是写在文件中.py
  3. 参考教程:Python 教程
  4. 执行文件python index.py
  5. 所有的代码都在同一个文件 index.py 中,各部分引用变量一致。

起步

  1. 输出一个hello world;

    print("hello world")

    注意:在 .py 文件中代码是不能随意缩进的,不然执行报错

  2. 用户输入;

    name = input("please input your name \n");
    print("welcome",name)

    执行文件后,等待用户输入,按 enter 结束输入,打印welcome XXX.

    注意:

    • 用户输入的值类型是字符串
  3. if...else语句

    # if block
    if name=="admin":
        print("欢迎管理员登陆!")
    else:
        print("登陆成功!")

    说明

    • if...else语句以 : 结束,语句块缩进表示;
    • # 表示注释,描写代码块的功能。
  4. 数据类型
    整数、浮点数、字符串、布尔值、空值

    # '\' 转义
    print("hello \n world")
    # '\t' 制表符 '\n' 换行‘r'XXX'’定义内容部不专一
    print(r"hello \n world");
    #‘'''xxx'''’格式化文本换行
    print('''hello
    world''')
    # 布尔运算符 and or not         
    print(8>5 and 8<10)

    说明:

    • 浮点数科学计数法表示:2e10
    • 布尔值大写的True / False
    • 变量命名是大小写敏感的,如:name/Name 不同。
    • 空值表示为none
    • 变量定义遵循基本的规则:英文、数字、下划线,不能以数字开头。
    • 常量定义不能改变的变量,用大写表示。
  5. 字符串

    # ord 对单个字符编码 chr 对单个字符的解码
    Name = ord('国')
    print(Name)
    # "国" 22269
    Name_ = chr(Name)
    print(Name_)
    # b'xx' 表示字节码
    # "中国" b'\xe4\xb8\xad\xe5\x9b\xbd'
    print("中国".encode("utf-8"))    
    # len 计算字符长度
    print(len("hello world"))
    # 文本格式化 
    print("%d 周年" % 70)
    # format() 格式化方法
    print("{0}周年".format(70))

    说明:

    • encode()编码;decode()进行解码;
    • 指定编码类型,如果超出编码范围,就会报错; 中文超出ASCII;
    • %s 字符串;%d整数;%f浮点数;%x十六进制数;%%转义输出%
    • format()格式化方法;
  6. 数据结构list

    # list 
    names = ["花花","小亮","明总"]
    print(names[0])
    # udpate 
    names[0] = 70;
    
    # tuple 元组
    names_ = (1949,2019,70)
    print(names_[2])

    说明

    • append() 往后添加一个元素;insert(index,name)插入元素到指定位置;pop()删除末尾元素;
    • 元组具有不可变性,即其中的元素一经初始化是不能改变的;
    • 元组中元素指向的是一个对象,那对象属性的改变是没有关系的。
    • 元组定义一个元素是 (12) 会存在算数歧义,为了区分如此声明(12,)
  7. 循环

    # for ... in 循环
    for item in names:
        print(item)
    # while 循环
    num = 3
    while num>1:
        print(num*2)
        num = num-1

    说明:

    • range(11)生成 0-10 的整数序列;
    • break跳出循环;
    • continue跳过本次循环;
  8. 使用 dict 字典。
    类似对象、以键值对存储数据;

    # dict
    user = {"袁明":23,"鲁花":32,"祖国":70}
    print(user["祖国"])
    # keys() / values() / items()
    for key in user.keys():
        print(key,user[key])
    # set 只存储值,不重复
    age = set([23,32,70,32])
    print(age)

    说明:

    • ... in ... 判断 key 值是否存在于字典中;
    • get()获取值,不存在返回none,接受第二个参数作为不存在时的返回值;
    • pop()删除一个键值对;
    • add()set 中添加一个值;remove()则移除一个值;
    • values()返回字典值集合;keys()返回键值集合;items()key,value 进行迭代处理;
  9. 函数

    # 系统内置函数 , 如 abs() 求绝对值
    abs(-100)
    # 自定义函数
    def add(num1,num2):
        return num1+num2
    print(add(100,1))
    # 返回多个值,类似解构赋值
    def add(num1,num2):
        return num1,num2
    res1,res2 = add(100,1)
    print(res1,res2)
    # 函数可变参数
    def add(*nums):
        total = 0
        for n in nums:
            total+=n
        return total
    print(add(3,4,5,6))
    # 函数关键参数,即必须传入的参数和可选参数,def addUser(name,**other):
        print({"name":name,"other":other)
    addUser("祖国",age=70,desc="生日快乐!")
    # 参数传入时,可传入 dict , 
    info = {"age":70,"desc":"生日快乐!"}
    addUser("祖国",**info)
    
    # 命名关键字,即指定可选参数的名称 , 以下 只能传递 'age' 属性
    def addUser(name,*,age):
    print({"name":name,"other":age})
    addUser("祖国",age=70)

    说明:

    • max()最大值;内置函数规定了参数类型,参数个数,不合规则就报错;
    • 没有给定返回值的函数, 默认返回none;
    • 返回多个值时,可以进行解构复制,赋值给变量进行使用;
    • 函数参数定义,接受默认参数定义def add(num1,num2=70)
    • 模拟可变参数:

      1. 传入 list 对象,模拟传递不确定个数的参数;
      2. *定义参数为可变参数;
      3. **定义参数为可选参数;
    • 参数传入时,**会转换对象,按键值对传入到 **other
  10. 尾递归优化
    之前 js 也写过:es6 函数扩展
    代码比较短,贴一下:

     
     // 尾调用优化
     function factorial(n,total){if(n===1) return total;
         return factorial(n-1,n*total);
     } 
    

    意义在于每次调用都能获得累积值,并作为参数传入下一次调用函数中。

    # total 作为上一次函数调用后计算的值,传入下一个参数
    def factorial(n,total):
        if n==1:
            return total
        return factorial(n-1,n*total)
    print(factorial(10,1))

注意:

  • if语句、while语句、函数定义等含有语句块的都有:,且语句块需要缩进;

附所有代码执行结果:

正文完
 0

python基础知识

9次阅读

共计 2237 个字符,预计需要花费 6 分钟才能阅读完成。

基本数据类型

数字

 整型,浮点型,布尔型,复数 

 序列,集合,字典 

1 组

# 序列 - 字符串 str 不可变类型
# 序列 - 列表 list [1,2,3,4,5,6,'as'] 可变类型
# 序列 - 元组 tuple (1,2,3,4,5,6,'as') 不可变类型
    #和列表选择、切片很相似
    #type((1)) int;type(('as')) str 此处()不是元祖,而是运算符
    # ord() 查询字符串返回对应的 ASCII 数值 
# 集合 set {1,2,3,4,5}
    # 1 无序
    # 2 不重复 {1,1,2,2,3,3} {1,2,3}
    # 3 差集 - {1,2,3,4,5}-{3,4} {1,2,5}
    # 4 交集 &
    # 5 并集 |
    # 6 type({}) 为 dict 字典;set() 创建一个无序不重复元素集
# 字典 dict {'q':'打击','w':'前进'}
    # key 不重复
    # key 需为不可变类型, 不能为列表,可以为元组
    # {} 定义空字典 

2 集合

set {1,2,3,4,5}

1 无序 
2 不重复 {1,1,2,2,3,3} {1,2,3} 
3 差集 - {1,2,3,4,5}-{3,4} {1,2,5} 
4 交集 & 
5 并集 | 
6 type({}) 为 dict 字典;set() 创建一个无序不重复元素集 

3 字典

dict {‘q’:’ 打击 ’,’w’:’ 前进 ’} key 不重复 key 需为不可变类型, 不能为列表,可以为元组 {} 定义空字典

 注:1. 列表可以存放不同类型的数据,是最常用的 Python 数据类型。与字符串不同,列表元素支持改写。2. 列表和元组的区别在于:列表中的元素的值可以修改,而元组中的元素的值不可以修改。元组比列表更加安全,因为不能修改 
3. 集合一个功能是进行集合操作,另一个功能是消除重复的元素。

4 包、模块、类

# 区分包和文件夹 包内含__init__.py 文件 此模块名为:init,内容可为空,加上, 可解决
# import 引入模块
# from t import c1 从 t 模块引入 c1 类、方法、变量或者 从 t 文件引入 c1 模块
# from t import * 可引入 t 所有类 不推荐,当命名冲突时难处理
# python 一行建议不超过 80,换行, 上行末尾加:\,不推荐,可用括号
# 包和模块不会被重复导入
# 避免循环引入模块

5 类

# 特殊类:枚举 enum (from enum import Enum)
    # 枚举标签名称最好用大写,表示常亮
    # 枚举的意义重在标签,不在数值
    # 字典和类变量的缺点是:可变,值可被轻易更改;没有防止相同标签的功能
    # 枚举类型:VIP.GREEN 枚举名称:VIP.GREEN.name 枚举值:VIP.GREEN.value
    # 枚举可以被 for in 遍历,遍历 VIP.__members__.items() 或 VIP.__members,可将别名加入遍历
    # 枚举可以做 == 比较,不能做大小比较
    # 枚举值相同时,第二个标签将成为第一个的别名
    # 用法:在数据库中存储数值,在代码中用标签代表类型,通过数字转换成数据类型 a=1 VIP(a)
    # 值需强制为整型数字,不许值相同时 (from enum import IntEnum,unique) ,class VIP(IntEnum,unique):

6 函数

# 函数可以作为结果被返回,函数可以赋值给另外一个变量
# 闭包(和函数的作用域有关)# 闭包 = 函数 + 环境变量
    # 环境变量:定义在函数外部,非全局变量,避免外部对其影响
    # 环境变量保存在  函数.__closure__[0].cell_contents 中
    # nonlocal 将变量转为环境变量
    # 闭包容易造成内存泄漏,用面向对象更加主流
#三目运算 x if x>y else y
# map 函数,序列 每个元素依次执行函数
    # 结合 lambda 匿名函数使用 list_x=[1,2,3] list_y=[1,2,3] r=map(lambda x,y:x*x+y,list_x,list_y)
# reduce python3 中已不是全局函数 from functools import reduce
    # 连续计算 返回结果

# 结合 lambda 匿名函数使用 list_x=[1,2,3] list_y=[1,2,3] r=map(lambda x,y:x*x+y,list_x,list_y)

reduce python3 中已不是全局函数 from functools import reduce

# 连续计算 返回结果 

7 装饰器 decorator(AOP 编程思想)

# 不改变原有函数,增加新的特性
# 最有价值的功能 @+ 装饰器的名字 不改变原函数调用方式
    # 直接调用原函数即可,无需通过新函数(体现出原函数和新函数之间的关联)# 为满足原函数可任意传入参数,可在装饰器内的函数加入 可变参数 (* 任意 + 参数名):例如:wrapper(*args)
    
    # **kw 关键字参数,可以指定任意数量,打印 kw 会以字典形式出现
    # 为支持 **kw 关键字参数,可在装饰器内部加入参数 **kw
    

# 装饰器案例

import time

def decorator1(func):
    def wrapper(*args,**kw):
        func(*args,**kw)
        print(time.time())
    return wrapper
@decorator1
def f1():
    print('打印现在时间:')
#f=decorator1(f1)
#f()
f1()


@decorator1
def f2(myName):
    print(myName,'打印现在时间:')
f2('MA')

@decorator1
def f3(myName,**kw):
    print(myName,'打印现在时间:')
    print(kw)
f3('MA',a=1,b=2)

正文完
 0