传参方式:
1.默认传参:形参里k=v,如果调用时不传k,则k为v;如果传m,则k为m
2.按顺序或k=v
3.*args,可传多个或0个实参,args会接收
4.**args,可传多个或0个实参,args会接收,但必须用k=v的形式传参
5.调用传参时,*args可序列解包列表。如定义l=[1,2,3],调用时test(*l)
6.调用传参时,**args可序列解包字典。如定义dic=[a=1,b=2,c=3],调用时test(**l)
##可变参数
PORT = 3306 #常量
def mysql(host,user,password,port,charset,sql,db):
print('连接mysql')
# mysql('ip','user','sdfsdf',3306,'sdfsdf','select','db')
# mysql(user='root',password='123456',host='192.168.1.3',
# port=3306,sql='sdfsdf',db='sdfsdf',charset='sdfsdf')
#
# mysql('192.168.1.1','root',port=3306,password='sdfsdf')
#mysql(password='123456','root',) 不对
# def mysql2(ip,*info):
# print(info)
#
# mysql2('user',13345435,00000,'sefsd','sdfds')
# mysql2()
# mysql2(1)
# mysql2(1,2)
#这种参数是必传的还是非必传的
#有没有限制参数个数
def send_mail(*args):
print(args)
#
# send_mail('qqq@qq.com')
# send_mail('qqq@qq.com','asaaa@163.com','ddd@sina.com')
#
# def calc(a,b,c):
# print(a+b)
# return a+b
#
# l = [1,2,3]
# calc(*l)
##关键字参数
# #**可以不传
# def mysql(**mysql_info):
# print(mysql_info)
#
# print(mysql())#返回空
# #print(mysql('ip','user')) #没有关键词,会报错
# print(mysql(ip='192.1',port=3306))#传入关键字参数,返回字典
#
def request(url,method,**info):
print(info)
print(request('www.trg.cn','post',data='zff',head='dddd'))#url和method必须传,后边儿随意
def mysql(host, user, password, port, charset, sql, db):
print('连接mysql')
print(mysql())
dic = {
'host': '192.168.1.1',
'user': 'root',
'password': 123456,
'port': 3306,
'charset': 'utf-8',
'sql': 'sql',
'db': 'db'
}
#**把字典拆开,变成k-v传参。其中key必须和形参一样.
mysql(**dic)
#list删除元素错误循环示范:
li = [1,1,2,3,4,5,6,7,8,9]
for i in li:
if i%2!=0:
li.remove(i)
print(li)
#循环删list会计算出错,因为删了一个元素后,后边的元素下标会改变,取值会遗漏
#解决办法:定义俩个一样的表,循环第二个,删除第一个
import copy
li = [1,1,2,3,4,5,6,7,8,9]
li2 = [1,1,2,3,4,5,6,7,8,9]
#也可写成 li2 = li (叫浅拷贝,这个li2和li的内存地址一样)
#li2 = copy.deepcopy(li) #深拷贝,重新开辟了一块内存
# print(id(li)) #查看内存地址
for i in li2:
if i%2!=0:
li.remove(i)
print(li)
##常用模块:
一个python文件就是一个模块
1、标准模块,python自带的
2、第三方模块 需要安装
3、自己写的python文件
##json模块:
import json
#解析json的
json_str = '''
{"name":"xiaohei","age":18,"sex":"男","age":18}
'''
res = json.loads(json_str) #把字符串(json串)转成字典
print(res)
print(type(json_str))
print(type(res))
dic = {
"xiaohei":{
"age":18,
"password":12345,
"sex":"男",
"addr":"北京"
},
"马春波":{
"age":18,
"password":12345,
"sex":"男",
"addr":"北京"
},
"王东泽":{
"age":18,
"password":12345,
"sex":"男",
"addr":"北京"
},
}
res = json.dumps(dic,ensure_ascii=False,indent=4)#把字典变成字符串
print(res)
f = open('user.json','w',encoding='utf-8')
f.write(res)
load 自己读
f = open('user.json',encoding='utf-8')
res = json.loads(f.read())
print(res)
res = json.load(f)
print(res)
#dump 自己写
fw = open('newuser.json','w')
json.dump(dic,fw,indent=4,ensure_ascii=False) #字典做json写入文件,需要考虑到字符和格式。
##OS模块
import os
res = os.listdir('/Users/nhy/Desktop') #列出某个目录下的所有文件
os.remove()
os.rename()
os.mkdir(r'test/niuhy/haha')#创建文件夹
os.makedirs(r'test1/lyl/aaa')#会创建父目录
res = os.path.exists(r'/Users/nhy/Desktop/stu.txt')
os.path.isfile() #判断是否为文件
os.path.isdir()#判断是否为文件
res = os.path.split(r'/Users/nhy/Desktop/stu.txt')
res = os.path.dirname(r'/Users/nhy/Desktop/stu.txt')#取父目录
res = os.getcwd() #获取当前的目录
os.chdir(r'/Users/nhy/Desktop/')#更改当前目录
res = os.getcwd()
print(res)
open('a.txt','w')
print(os.environ)#看你电脑的环境变量
res = os.path.join('test','hhh','abc','a.txt')#拼接路径
print(res)
res= os.path.abspath('..')#根据相对路径取绝对路径
print(res)
res = os.system('hhhsdf')#执行操作系统命令
# print(res)
res = os.popen('ifconfig').read()
print('res',res)
##time模块
import time
#格式化好的时间 20181202
#时间戳 2343242
#时间元组
# print(int(time.time()))#时间戳
# res = time.strftime('%Y-%m-%d %H:%M:%S')#取当前格式化好的时间
# print(res)
#时间戳转换成时间元组,时间戳转格式化好的时间
#time1 = time.gmtime(int(time.time()))#把时间戳转成时间元组,以标准时间的时间转换的
# time1 = time.localtime(int(time.time()))#把时间戳转成时间元组,以标准时间的时间转换的
# res = time.strftime('%Y-%m-%d %H:%M:%S',time1)
# print(res)
#格式化好的时间转时间戳
timep = time.strptime('2018-10-23 15:38:59','%Y-%m-%d %H:%M:%S')
print(timep)
res = time.mktime(timep)#把时间元组转成时间戳
print(res)
#20181023 2323
def timestampToStr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
#时间戳转格式化好的时间
if timestamp:
time1 = time.localtime(timestamp)
res = time.strftime(format, time1)
else:
res = time.strftime(format)
return res
#20180304153958
def strTotimestamp(str=None,format='%Y%m%d%H%M%S'):
#格式化的时间转时间戳
if str:
timep = time.strptime(str, format)
res = time.mktime(timep)
else:
res = time.time()
return int(res)
##全局变量
name = '小明'
stus = []
#list、字典、集合 不需要声明即可全局使用
#字符串、int、float、元组 需要声明global
def a():
global name
stus.append('abc')
name = '哈哈哈'
print(name)
#函数体内声明了global,里边的操作,对外面或其他函数中都有效。
def b():
print('stus..',stus)
print(name)
age = 18
print(age)
a()
b()
money = 500
def test(consume):
return money - consume
def test1(money):
return test(money) + money
money = test1(money)
print(money)
def test():
global a
a = 5
def test1():
c = a + 5
return c
test()
res = test1()
print(res)
import copy
# 0 1 2 3
num1 = [1,1,2,3,4,5,6,7,7,8]
num2 = num1 #浅拷贝
num2 = copy.deepcopy(num1)
#深拷贝
print(id(num1))
print(id(num2))
# 0 1 2
for i in num2:
if i%2!=0:
num1.remove(i)
print(num1)
#2 4 6 8
#不变
#报错
##列表生成式
s =[1,2,3,4,5,6,7,8]
for i in s:
print(i+1)
res = [ i+1 for i in s]
res = [str(i) for i in s]
print(res)