python基础学习4-函数、内置函数、os模块、time模块

 

1       函数

1.1     字符串格式化方法

Python中字符串格式化输出的几种方法:

https://www.cnblogs.com/hongzejun/p/7670923.html

字符串格式化另外一种方式format方式

#字符串format()方法
#
第一种
import datetime
msg = '欢迎光临{name},今天的日期是{today}'
msg = msg.format(name = 'zhangsan',today = datetime.datetime.today())
print(msg)

#第二种
sql = 'insert into my_user_value({id},{name},{sex},{addr})'
tmp = sql.format(id=11,name='lisi',sex='',addr='dfdsd')
print(tmp)

#第三种
sqla= 'insert into {} value {}'.format('aaa','bbb')
print(sqla)


#format_map   是对字典字符串格式化
d = {'name':'小黑','sex':''}
words = '名字:{name},性别:{sex}'.format_map(d)
print(words)

Python2的默认字符集编码是ASCII码,如果出现如下错误都是python2中报的:

 

可以在python2前面添加一个注释-*- coding:utf-8 -*- 即可解决中文报错问题;

python3默认是utf-8(utf-8是unicode编码的子集),添加中文不会报错。

name = '小黑'
FILE_NAME = 'goods.json'   #变量名如果是大写的表示常量,常量表示变量值一般都不会怎么变化的

1.2     全局变量与局部变量

name = '小黑'
FILE_NAME = 'goods.json'   #变量名如果是大写的表示常量,常量表示变量值一般都不会怎么变化的

#局部变量:在函数里面定义的变量都是局部变量,除了函数之外就不能用了
#全局变量:在文件最上面定义的这个变量就是全局变量
def hhh():
    name = '小白'
   
print(name)
hhh()

global name     #在函数里如果需要修改全局变量的值,则用global声明一下,一般不建议使用全局变量,因为全局变量一直占用内存

 

字典和list这种可变变量,不需要用golbal来声明,就可以直接修改了

 

1.3     可变参数

可变参数(也称为参数组):不是必填的,没有限制参数个数,一般参数比较多的时候可以使用此方法实现;

在参数前面添加一个*号:
def send_mail(*email):
    print('email..',email)
send_mail('zhangsan@163.com')
send_mail('zhangsan@163.com','lxy@qq.com','zyf@126.com')
send_mail()

示例:

def run(name,*args):
    print(name)
    print('args:',args)
run('zhangsan','22','beijing','天通苑')

将zhangsan传给了name,其他的字符串都传给了args

函数return多个值时,默认放在一个元组中,也可以用多个变量接收return的值
def nhy():
    name = 'niuhanyang'
   
sex = ''
   
age= 18
    return name,sex,age
res = nhy()                    #默认存放在一个元组中
print(res)
a,b,c = nhy()                 #也可以使用多个变量接收return的值
print(a,b,c)

#位置参数(必填参数),默认值参数(不必填),可变参数(不必填,不限制参数个数)
#
位置参数
def op_db(ip,port,db,user,passwd,sql):
    print('连接mysql操作数据库')
    pass
op_db('192.168.1.1',3306,'aaa','root','123456','select')
op_db('192.168.1.1','3306',user='root',passwd='123456',db='jzx',sql='insert')

#关键字参数:在参数前面添加两个**号,不必填,不限制参数个数,传的参数放在了字典里面
print('------关键字参数1------')
def my(**info):
    print(info)
my(name='haha',sex='',age=18)
my()
my(type='car',a=1,c=1)

print('------必填参数+关键字参数2------')
def my(name,**info):
    print(name)
    print(info)
my('xiaohei',a='aaaa',b='bbbbb')        #两个**号关键字参数必须的指定谁等于谁,不指定会报错


print('------多种参数1------')
#如果多种类型的参数一起使用,则必须是按位置参数->默认参数->可变参数->关键字参数的顺序填写。
def my(name,sex='',*args,**kwargs):
    print(name)
    print(sex)
    print(args)
    print(kwargs)
my('xiaohei')
my('xiaohei','hhh','args','args2',k='1',k2='2')

1.4     递归

递归,即函数自己调用自己,递归最多循环999次。用递归的话,必须得有一个明确的结束条件;用递归能实现的也可以使用循环实现。

def my2():
    num = input('输入一个数字:')
    num = int(num)
    if num%2 !=0:
        print('请输入偶数')
        return my2()
my2()

 

import random
res = random.sample(range(1,34),6)
print(res)
#方法一
for i in range(len(res)):
res[i] = str(res[i]).zfill(2)
print(res)

#方法二:列表推导式,列表生成式
res = [str(i).zfill(2) for i in res]
print(res)

#100里面的偶数
hh = [i for i in range(0,100,2)]
print(hh)

2       内置函数

Python内置函数:

Print

input

int

dict

set

list

str

len

open

tuple

type

max #取最大值

dir #看这个对象里面有哪些方法

msg ='hello'
print(dir(msg))

sorted #排序

print(chr(97)) #打印数字对应的ascii

print(ord(‘b’)) #打印字符串对应的ascii

round() #保留几位小数

eval #python执行代码

exec #执行python代码

enumerate #枚举方法

#同时获取下标以及元素的方法:
#
方法一
stus = ['张三','李四','王五']
for i in range(len(stus)):
    print(i,stus[i])
#方法二:enumerate枚举方法:
for index,s in enumerate(stus):
    print(index,s)

指定下表从指定的数值开始,不指定默认从0开始:

 

Zip #压缩

stus =  ['张三','李四','王五']
sex = ['','','']
age = [30,20,22,21]
for name,se,ag in zip(stus,sex,age):    #zip将多个list压缩到一起
   
print(name,se,ag)

如果list元素不一样多,则循环最少的。

Map          #循环帮你调用函数

Filter

3       模块

一个python文件就是一个模块

3.1     标准模块

标准模块:python自带的模块就是标准模块,也就是可以直接import进来的标准模块,如:

import json

import random

import datetime

import time

import os

3.2     第三方模块

第三方模块:别人写好的模块,你安装完之后就能用

3.2.1  pip安装

第三方模块需要自己安装,使用pip源方法进行安装

pip install +第三方模块名

pip install pymysql

如果pip命令不存在的,则直接到python中安装目录(D:Miniconda3Scripts)的pip添加到环境变量中去;

如果pip命令有,但是还是不能安装,则用where pip查看下面是否是有多个pip导致的,将非python下的pip重命名即可解决;

 

如果装了多个版本的python,则下载第三方库的方法为:

python2 –m pip install xxx

python3 –m pip install xxx

3.2.2  手动安装

先从python官方网站(https://pypi.org)上搜索需要安装的模块:

.whl后缀结尾的文件安装方法(使用绝对路径方法进行安装):

pip install D:pythonbao edis-2.10.6-py2.py3-none-any.whl

 

.tar.gz压缩包的文件安装方法:

先解压文件,进入到解压的文件目录下,在地址栏上输入cmd进入到该路径下(或者在该解压文件夹下按住shift键,右键选择“在此处打开命令行窗口”),在打开的窗口下执行python setup.py install。

 

Pycharm安装第三方模块的方法(这个不是太好用):

 

3.3     自己写的模块

自己写的:自己写的python文件

3.4     常用模块

3.4.1  os模块

import os
print(os.getcwd())  #取当前的路径
os.mkdir('spz'#在当前目录下创建一个文件夹
os.mkdir('d:\aaa'#在绝对路径下创建文件夹
os.makedirs('spz2'#在当前目录下创建一个文件夹,
os.makedirs('stu\laowang'#父目录不存在时,会自动帮忙创建父目录,而mkdir不会;

print(os.listdir('D:\pythonscript\day5'))  #获取某个路径下的所有文件

# for i in range(10):
#     os.mkdir('D:\pythonscript\day5\test%s'%i)
#
把末尾是偶数的文件夹中,创建一个a.txt文件,里面随便写点东西
#
思路如下:
#1
、获取到这个目录下所有的文件夹,os.listdir('')
#2
、判断文件夹的名字最后一位是不是偶数
#3
、如果是偶数的,在这个文件里面f = open(a.txt) f.write('xxxx')

for dir in os.listdir('D:\pythonscript\day5'):
    if dir[-1].isdigit():
        if int(dir[-1])%2==0:
            abs_path = r'D:\pythonscript\day5\%s\a.txt'%dir
            with open(abs_path,'w') as fw:
                fw.write('test')

#拼接路径,会自动识别路径分隔符
print(os.path.join('day5','test0','a.txt'))
print(os.sep)   #显示当前系统文件路径分隔符

print(os.path.dirname('D:\pythonsript\day5\test0\a.txt'))  #获取父目录的路径

os.path.getsize()   #获取文件大小的

3.4.2  time模块

import time
#时间戳,从unix元年开始到现在过的秒数
#
格式化号的时间2018-07-01

print(time.time())  #获取当前时间戳

print(time.strftime('%Y-%m-%d %H:%M:%S'))  #获取格式化好的时间
print(time.strftime('%y%m%d'))  #%Y%y有点区别

#
时间戳和格式化时间转换
#
时间元组

print(time.gmtime())    #把时间戳转成时间元组,如果不传时间戳,那么取的是标准时区的时间
print(time.localtime()) #取当地时区的时间元组
print(time.localtime(1530436244-864000))

print(time.asctime(time.localtime(1530436244-864000)))
print(time.strftime('%Y%m%d%H%M%S',time.localtime(1530436244-864000)))

#时间戳转格式化好的时间
#1
、先把时间戳转成时间元组
#2
、再把时间元组转成格式化好的时间
def timestampToStr(timestamp=None,format='%Y%m%d%H%M%S'):
    if timestamp:
        time_tuple = time.localtime(timestamp)  #转成时间元组
       
return time.strftime(format,time_tuple)
    return time.strftime(format)
res = timestampToStr(1530436244,'%Y%m%d')
res2 = timestampToStr()
print(res,res2)

 

#格式化好的时间转时间戳
#1
、先把格式化好的时间转成时间元组
#2
、再把时间元组转化成时间戳

time1 = time.strptime('20180701','%Y%m%d')
print(time.mktime(time1))

def strToTimestamp(format_time=None,format='%Y%m%d%H%M%S'):
    if format_time:
        time_tuple = time.strptime(format_time,format)
        return int(time.mktime(time_tuple))
    return int(time.time())
t1 = strToTimestamp('20180702020202')
t2 = strToTimestamp()
print(t1,t2)

原文地址:https://www.cnblogs.com/better0903/p/9275879.html