Python3基础

Python3安装

  1. yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc
  2. 下载源码包到/opt下面,解包,创建文件夹mkdir /usr/local/python3
  3. 执行./configure --prefix=/usr/local/python3
  4. 执行make
  5. 执行make install
  6. 执行以下命令,修改软连接
    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    这样增加软连接需要运行的时候执行python3 文件就行,这样就不需要改yum配置了

Python3常识

  1. 变量的命名规则是字母,数字和下划线的组合,不能以数字开头。(大小写是敏感区分的)
  2. 变量名字要有具体的意义,a = 2(将变量a指向2这片内存)
  3. 常量是值基本固定不变的,大家一般全部大写来命名
  4. 注释,单行用#,多行用“”“注释的内容”“”
  5. 交互a = input(""),键盘输入值后会储存为字符串类型
  6. end=','会让结果输出在同一行
  7. rang(5,10)就是(5,6,7,8,9),rang(10)就是(0,1,2,3,4,5,6,7,8,9)
  8. python3默认的编码就是utf-8了,不过大部分人怕运行环境不正常,还是习惯加# coding=utf-8,最早ascii用8位表示一个字符,Unicode用16位,utf-8可变成字符编码,用8位表示一个英文字符,用24位表示一个中文,GBK用8位表示英文字符,16位表示中文。
  9. 编码,a="kkbox" ,b=a.encode("utf-8")此时b已经变为bytes类型的数据了,用于网络传输和保存。反之解码,decode(“utf-8”)

常用数据类型

  • int
    整型,32位服务器和64位服务器的最大值不同,可以支持+,-,*,/,**,%取余
  • string
    字符串类型,通常“abc123”,字符串可以+拼接在一起,“abc123”*2,字符串前面加r的r“abc\r123”的话,字符串里面内容保持原样,不转义。更多用法参考http://www.runoob.com/python3/python3-string.html
  • 布尔型
    包含True和False
  • 列表
    list是Python中最基本的数据结构。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。例如list1 = ['Google', 'Runoob', 1997, 2000],更多用法参考http://www.runoob.com/python3/python3-tuple.html
  • 字典
    dict是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key:value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,例子:
    dict = {'Alice': '2341', 'Beth': '9102'},更多用法http://www.runoob.com/python3/python3-dictionary.html
  • 集合
    集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。更多用法http://www.runoob.com/python3/python3-set.html
  • 元祖
    tuple与列表类似,不同之处在于元组的元素不能修改,也叫只读列表。a = ('Google', 'Runoob', 1997, 2000),更多用法参考http://www.runoob.com/python3/python3-tuple.html

逻辑相关基础

  1. if 语句

    if condition_1:
    	pass
    elif condition_2:
    	pass
    else:
    	pass
    

    condition_1是判断条件,这样判断结果就True和False两种,elif就是多个判断了(类似C的switch),建议把大概率的事件条件写在前头,这样条件判断大概率命中,执行效率高。同时逻辑语句之间是可以嵌套的,注意缩进

  2. while 循环

    	n = 100
    	sum = 0
    	counter = 1
    	while counter <= n:
        	sum = sum + counter
        	counter += 1
       else:
    		pass
    	```
    这个while循环的例子sum变量最后就是1100的累加和,只要是条件成立,就一直循环下去,如果条件一直为真就是无限循环了,else不是必须的,如果带有,就是当循环条件不成立时执行的
    
  3. for 循环
    for循环可以遍历任何序列的项目,如一个列表或者一个字符串

    	languages = ["C", "C++", "Perl", "Python"]
    	for  tmp  in languages:
    		if tmp=="Perl":
    			break
    		else:
    			print(tmp)
    	```
    	break 语句可以跳出 forwhile 的循环体。如果你从 forwhile 循环中终止,任何对应的循环 else 块将不执行。continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
    ## 异常处理
    
     1. 在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常
    捕获异常最简单的语法格式:
    	
    
    	```python
    	try:
        	# 提示用户输入一个数字
        	num = int(input("请输入数字:"))
    	except:
        	print("请输入正确的数字")
    	```
    
    ## 文件相关操作
    
     - 基本实例
    	```python	
    	f=open("d:\爱情动作片\Ebody.avi",mode="r")
    	content=f.read()
    	print(content)
    	f.close()
    	```
     - 模式
    	r,只读模式,文件不存在的话程序报错
    	r+,读写模式,文件不存在的话程序报错,写的时候增加在原始数据前头
    	w,写模式,文件存在重头编辑,原来内容会丢失!不存在,就创建新的文件。
    	w+,读写模式,文件处理方式同上
    	a,追加模式,如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    	a+,追加读写模式,处理文件方式通上
     - 基本方法
    	```python
    	f.read()	读
    	f.write()	写
    	f.readline()	读取一行
    	f.readlines()	读取所有行,保存为一个列表
    	特殊用法for line in f:print(line, end='')	这个会按一行一行遍历打印内容
    	
    	f.tell()	返回文件对象当前指针所处的位置, 它是从文件开头开始算起的字节数。
    	f.seek()	如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数
    	f.close()	记得用完关闭
    	```
    ## 函数
     - 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段
     - return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None,函数里碰到return就结束了,返回值可以是任何数据。如果返回多个值,单个变量接收,变量是元组类型,不可修改。
    	```python
    	def my_sum(a,b,*args,**kwargs):
    		c=a+b
    		for tmp in args:
    			res=c+tmp
    		print(res)
    			
    	动态参数args在函数里是一个元组,可以接收无数个位置参数,但接收不了关键字参数,kwargs在函数里是一个字典,
    	可以接收无数个关键字参数,假如2个都存在,各司其职。
    	所以正常顺序是位置参数,*args,默认参数,**kwargs
    	```
     - 函数变量的作用域,只在函数体内有效,函数外部无法使用,全局变量,可以被函数内部使用,但是永远不建议这么用。
     - [菜鸟教程内置函数](https://www.runoob.com/python3/python3-built-in-functions.html)
     
    ## 装饰器decorate
     - 装饰器本身是一个函数,用来装饰其他函数
     - 在不改变原来函数的代码情况下,增加新的功能,且不改变调用方式
    ```python
    import time
    
    def xxoo(func):
        def deco(*args,**kwargs):
            start_time = time.time()
            end_time = time.time()
            print("time is %s" %(end_time-start_time))
        return deco
    
    
    @xxoo
    def test(name,age):
        time.sleep(3)
        print("this is in test,name is %s,age is %d" %(name,age))
    

序列化

序列化——将字典,列表等类型的数据转化为字符串类型的数据的过程称为序列化。一般用于文件写入,或者网络传输之用

  • json 只有一部分数据类型(数字,字符串,列表,字典,元组)可以使用json转化成字符串类型,尽量使用json

  • pickle 所有数据类型都可以使用pickle转化成字符串类型

    import json
    
    xxoo = {"username":"alex","passwd":"alex311"}
    # dumps和loads是操作内存中的数据,序列化和反序列化后还在内存中
    ret = json.dumps(xxoo)
    print(type(ret),ret)
    
    f = open("database","w",encode = "utf-8")
    # dump和load是操作文件中的数据,序列化和反序列化后都在文件中
    json.dump(xxoo,f)
    f.close
    # load 需要以读的方式打开文件,然后json.load(f)
    
  • [] 列表类型

  • () 元组,tuple类型数据不可以修改,只读

  • {} 字典类型,集合。创建一个空集合必须用 set(),set自动去重复了

  • 如果文件的数据非常大又需要json时,使用for循环和json.dumps,对每个数据进行序列化,然后f.write(数据+“\n”),读的时候使用文件一行一行读

软件编程基本规范

  • 文件目录结构

bin目录:所有可执行文件的目录
plugin目录:插件目录
main目录:软件主要代码目录
docs目录:说明文档目录,一般包含requirements.txt,README.text
conf目录:配置文件目录,一般有setting.py
resource目录:软件需要用到的资源目录,图片,声音等等

  • 路径相关
import os
pwd = os.getcwd()	#获取当前文件目录
project_pwd = os.path.dirname(pwd)	#获取当前文件的父目录

import sys
sys.path.append(project_pwd)	#把文件目录加入到python环境变量中
import plugin,main	#这样就可以搜寻到了
  • if name == ‘main
if __name__ == '__main__'	
	当该.py文件被直接运行时,if __name__ == '__main__'下的代码块将被运行
	当该.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行

匿名函数

有时候一些简单的函数,只需要用一次,就有可能用匿名函数myadd=lambda x,y:x+y,执行myadd(2,3)就是5,其中x,y是参数,x+y是表达式

递归函数

本质是一个嵌套函数,自己调用自己,比如文件搜索时候,判断是否是是目录,是目录继续进入目录

def sb(x)if x <= 1:
		print(x)
	else:
		sb(0.5x)

装饰器

func是原来已经写好的函数,wrapper是装饰器固定格式。

def wrapper(k):	#k其实是被装饰的函数名字
	def inner(*args,**kwargs)
		ret = k(*args,**kwargs)
		retun ret
	return inner

@wrapper
def func():
	print("xxxx")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值