python学习笔记(四):函数传参、*和**两种解包方式、匿名函数、全局变量和局部变量、map和filter、递归、内置函数、os模块、time模块、模块安装相关知识...

1、函数传参
# 位置参数传参方式

def userinfo(name,age,sex):
    print('name:%s,age:%s,sex:%s' %(name,age,sex))

userinfo('wangxiaoyu',18,'nv')#1.位置参数,传参的时候需要一一对应

测试结果:
name:wangxiaoyu,age:18,sex:nv
# 关键字传参方式 或 关键字和位置传参方式混合
def
userinfo2(name=None,age=None,sex='nan'):#默认值参数 print('name:%s,age:%s,sex:%s' % (name,age,sex)) userinfo2(sex='nv',name='wangxiaoyu',age=10)#2.用关键字参数方式传参,参数位置可以随意打乱 userinfo2('wangxiaoyu',sex='nv',age=18)#3.位置参数和关键字参数混合使用的话,位置参数必须一一对应,位置参数后的关键字参数可以打乱 userinfo2(name='wangxiaoyu',age=18,'nv')#4.错误写法,使用关键字参数后就不能再使用位置参数方式 测试结果: name:wangxiaoyu,age:10,sex:nv name:wangxiaoyu,age:18,sex:nv
SyntaxError: invalid character in identifier
# 可变参数、参数组,*args
        #   1、不是必填参数
        #   2、不限制参数的个数
        #   3、传入多个参数的时候他把参数放到一个元组里面
def userinfo3(*args):
    print(args)

userinfo3()
userinfo3('wangxiaoyu')
userinfo3('wangxiaoyu',18,'nv')

测试结果:
()
('wangxiaoyu',)
('wangxiaoyu', 18, 'nv')
# 关键字参数:**kwargs
          #   1、不是必填参数
          #   2、不限制参数的个数
          #   3、传入多个参数的时候他把参数放到一个字典里面
          #   4、必须的使用关键字调用,k=v,k1=v1

def userinfo4(**kwargs):
    print(kwargs)
userinfo4()#不传参
userinfo4(name = 'wangxiaoyu')#关键字传参
str = {'name':'wangxiaoyu','age':18,'sex':'nv'}
userinfo4(**str)#传字典

测试结果:
()
('wangxiaoyu',)
('wangxiaoyu', 18, 'nv')
# 位置参数和关键字参数混合使用
def myfunc2(name,addr='beijing',*args,**kwargs):
    print('name',name)
    print('addr',addr)
    print('addr',args)
    print('args',kwargs)


myfunc2('wangxiaoyu','bejing','heihei','haha')

测试结果:
name wangxiaoyu
addr bejing
addr ('heihei', 'haha')
args {}


myfunc2('wangxiaoyu','bejing','heihei','haha',say1='xixi',say2='i love you !')

测试结果:
name wangxiaoyu
addr bejing
addr ('heihei', 'haha')
args {'say1': 'xixi', 'say2': 'i love you !'}

myfunc2('wangxiaoyu','heihei','haha')#划重点:这里使用位置参数传参方式,那么就会遵守位置参数的一一对应原则

测试结果:
name wangxiaoyu
addr heihei
addr ('haha',)
args {}

myfunc2('wangxiaoyu',say1='jiu bu gao su ni !')

测试结果:
name wangxiaoyu
addr beijing
addr ()
args {'say1': 'jiu bu gao su ni !'}

myfunc2(name='wangxiaoyu','lll','lslsls')#错误写法:关键字参数后面不能用位置参数了,传参的时候就会报错
测试结果:
SyntaxError: positional argument follows keyword argument
# 通过* **两种解包方式传参  * 解包后是位置参数传参方式,字符串与参数一一对应, **解包后,是关键字参数传参方式
def connect(ip,port,username,password):
    print(ip)
    print(port)
    print(username)
    print(password)


# 集合
str = {'192.169.6.66','36000','root','123456'}
connect(*str)#解包 '192.169.6.66','36000','root','123456'

#列表
list = ['192.169.6.66','36000','root','123456']
connect(*list)#解包 '192.169.6.66','36000','root','123456'

#元组
t = ('192.169.6.66','36000','root','123456')
connect(*t)#解包 '192.169.6.66','36000','root','123456'

# 字符串
s1 = '192.169.6.66'
s2 = '36000'
s3 = 'root'
s4 = '123456'
connect(s1,s2,s3,s4)#只能一个参数一个参数的传,直接定义str='192.169.6.66','36000','root','123456'后传入的方式会报错

#字典
d = {'ip':'192.168.6.66','port':'36000','username':'root','password':'123456'}
connect(**d)#解包 'ip'='192.168.6.66','port'='36000','username'='root','password'='123456'


以上调用测试结果:
192.168.6.66
36000
root
123456

2、匿名函数

# 匿名函数

sum = lambda x:x+1
print(sum(2))

测试结果:
3

p = lambda :print('I Love You !')
p()

测试结果:
I Love You !

3、全局变量和局部变量

全局变量:
大家都可以用的变量就是全局变量。
不可变的数据类型是全局变量的话,必须得加global:
int str 元组
可变的数据类型是全局变量的话,不需要加global:
字典 list 集合
局部变量:
函数里面定义的变量都是局部变量。
# 可变数据类型作为全局变量不需要加global
dict = {'wangxiaoyu':18}

def printDict():
    dict.setdefault('lixiaokai',19)
    print('函数中的dict:',dict)

print('调用函数前全局变量中的dict:',dict)
printDict()
print('调用函数后全局变量中的dict:',dict)

测试结果:
调用函数前全局变量中的dict: {'wangxiaoyu': 18}
函数中的dict: {'wangxiaoyu': 18, 'lixiaokai': 19}
调用函数后全局变量中的dict: {'wangxiaoyu': 18, 'lixiaokai': 19}
#不可变数据类型
filename = 'product.json'

def showFileName():
    filename = 'product.json2'#局部变量
    print('filename:',filename)

showFileName()
print('全局变量filename:',filename)

测试结果:
函数中filename: product.json2
全局变量filename: product.json
filename = 'product.json'

def showFileName2():
    global filename#加上global后修改的就是全局变量中的值

    filename = 'product.json3'
    print('函数中filename:', filename)

showFileName2()
print('全局变量filename:',filename)

测试结果:
函数中filename: product.json3
全局变量filename: product.json3
#全局变量在函数中定义时,只有当函数执行后才会被定义,才能被使用
def showUserName():
    global username
    username = 'wangxiaoyu'
    print('函数中的username:',username)

def showUserName2():

    print('函数中的username:', username)

showUserName2()#直接调用会报错,因为showUserName这个函数没有执行,所以username也不会成为全局变量,因此直接调用showUserName2的时候会报错

测试结果:
NameError: name 'username' is not defined

showUserName()
showUserName2()

测试结果:
函数中的username: wangxiaoyu
函数中的username: wangxiaoyu

4.map和filter

#1、map是循环帮你调用函数的
#2、map会把函数每一次调用的返回值保存,最后返回

#filter
#1、循环帮你调用函数
#2、帮你过滤你传入的参数,函数的结果返回是true那就保存,返回false就不要了

l = ['wangxiaoyu','lixiaokia','lijunhao','lixinran']
def showUserInfo(username):
    print('你好,%s' % username)

list(map(showUserInfo,l))
测试结果:
你好,wangxiaoyu
你好,lixiaokia
你好,lijunhao
你好,lixinran
list(filter(showUserInfo,l))
测试结果:
你好,wangxiaoyu
你好,lixiaokia
你好,lijunhao
你好,lixinran
l2 = [0,30,60,66,79,80,85,90,98]
def showScore(score):
    return score > 69 #大于69返回True,小于69返回False
# 过滤l2中大于69的数
print(list(filter(showScore,l2)))
测试结果:
[79, 80, 85, 90, 98]

print(list(map(showScore,l2)))
测试结果:
[False, False, False, False, True, True, True, True, True]

5、递归(函数自己调用自己)

#递归最多循环999次
#用递归的时候一定要指定一个结束的条件,如果不制定那么做多循环999次。
count= 0
def hello():
    global count
    count += 1
    print('count %s'%count)
    hello()
hello()

测试结果:
count 1
count 2
count 3
……
……
count 992
count 993
count 994
count 995
count 996
def test1():
    num = int(input('please enter a number:'))
    if num%2==0:#判断输入的数字是不是偶数
       return True #如果是偶数的话,程序就退出了,返回true
    print('不是偶数请重新输入!')
    return test1()#如果不是偶数的话继续调用自己,输入值
print(test1())#调用test

测试结果:
please enter a number:1
不是偶数请重新输入!
please enter a number:3
不是偶数请重新输入!
please enter a number:6
True

 6、内置函数

常见的内置函数有len type int str dict list set tuple等等

import os                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
print(dir(os.path))   #查看当前命令下有哪些方法  如果点不出来提示的话可以用这个方法查看                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
测试结果:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
   ['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_get_sep', '_joinrealpath', '_varprog', '_varprogb', 'abspath', 'altsep', 'basename', 'commonpath', 'commonprefix', 'curdir', 'defpath', 'devnull', 'dirname', 'exists', 'expanduser', 'expandvars', 'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime', 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 'normpath', 'os', 'pardir', 'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', 'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', 'supports_unicode_filenames', 'sys']    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
l = [1,2,3,7,9,6,5]                 
print(sorted(l))      #按升序排序        
                                    
测试结果:                               
[1, 2, 3, 5, 6, 7, 9]               
l = [1,2,3,7,9,6,5]                                          
print(list(reversed(l)))    #元素反转,需要转换成list后才能查看             
                                                             
测试结果:                                                        
[5, 6, 9, 7, 3, 2, 1]                                        
print(all([1,2,3,4,5,6]))#判断可迭代的对象里面的值是否都为真
print(all([1,2,3,4,5,False]))#判断可迭代的对象里面的值是否都为真
测试结果:
True
False
print(any([0,None,'',False,8]))#判断可迭代的对象里面是否至少有一个为真的元素
print(any([0,None,'',False]))#判断可迭代的对象里面是否至少有一个为真的元素

测试结果:
True
False
print(bin(16))#十进制转换成二进制
测试结果:
0b10000
print(bool(None))#把对象换行成布尔类型
print(bool('asdf'))
测试结果:
False
True
print(chr(60))#打印数字对应的ASCII码
测试结果:
<
print(ord('<'))#打印字符串对应的ASCII码
测试结果:
60
print(eval('["a","b","c"]'))#执行python代码,只能执行简单的,定义数据类型和运算
测试结果:
['a', 'b', 'c']
print(eval('1+2'))
测试结果:
3
s = "print('你是我心中最美的花朵!')"
eval(s)
测试结果:
你是我心中最美的花朵!

exec(s)

测试结果:
你是我心中最美的花朵!
ss = "def sum():\n\tprint('正在执行3+6计算')\n\treturn 3 + 6"

exec(ss)#执行后相当于定义了sum函数,否则直接调用的话会报错
print(sum())
测试结果:
正在执行3+6计算
9
with open(r'内置函数.txt',encoding='utf-8') as fr:
    f = fr.read()#从文件中读出来的是字符串
    exec(f)
测试结果:
我的名字叫:wangxiaoyu
showName = """
score = 100
print('我的名字叫:%s,我今年%s岁啦,我的英语考了%s分' % (username,age,score))
"""

def showUserInfo():

    exec(showName,{'username':'lixiaokai','age':19})#正常传参
    exec(showName,{'username':'wangxiaoyu','age':19},{'username':'wxy','age':18})#重复传参的话,每个变量的值以最后一传的值为准
    exec(showName,{'username':'wangxiaoyu','age':18,'score':121})#score在字符串内定义的,所以即使传参当代码运行到score时,值又被设置成了100

showUserInfo()

测试结果:
我的名字叫:lixiaokai,我今年19岁啦,我的英语考了100分
我的名字叫:wxy,我今年18岁啦,我的英语考了100分
我的名字叫:wangxiaoyu,我今年18岁啦,我的英语考了100分

 7、os模块

# 查看文件路径                                                                                                   
print(os.path.dirname('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day5/操作数据库.py' ))    
测试结果:                                                                                                      
/Users/wangxiaoyu/PycharmProjects/python_automated_development/day5                                        
import os

# 获取当前目录下的所有文件夹及文件
print(os.listdir(r'/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4'))

测试结果:
['内置函数.py', 'map和filter.py', 'os模块.py', 'wang', '内置函数.txt', '函数.py', '时间戳.py']
print(os.path.isfile(r'map和filter.py'))#判断是否为文件,是返回True,否则返回False

测试结果:
True
print(os.path.isdir('wang'))#判断是否为文件夹

测试结果:
True
print(os.path.exists('wang'))#判断文件是否存在

测试结果:
True
os.mkdir('test')#在当前目录下创建一个文件夹
os.makedirs('li/test1')#在当前目录下创建如下li/test1,如果上级目录不存在则创建
os.rename('li/test1','li/test')#重命名
print(os.getcwd())#获取当前目录
测试结果:
/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4
# 获取父目录
print(os.path.dirname('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4'))
测试结果:
/Users/wangxiaoyu/PycharmProjects/python_automated_development
print('改变目录前,目录为:',os.getcwd())
os.chdir(r'/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/xiao')#改变到哪个目录下
print('改变目录后,目录为:',os.getcwd())

测试结果:
改变目录前,目录为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4
改变目录后,目录为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/xiao
# 分割文件路径和文件名,最后一个默认为文件名
print(os.path.split('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/123.py'))
测试结果:
('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4', '123.py')
#取绝对路径
print(os.path.abspath('bbb.py'))
测试结果:
/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/bbb.py
print(os.path.getmtime('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/bbb.py'))#获取文件修改时间
print(os.path.getctime('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/bbb.py'))#获取文件创建时间
print(os.path.getatime('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/bbb.py'))#获取文件最近一次访问时间

测试结果:
1561024408.4518201
1561024408.4527607
1561024410.699889
print(os.cpu_count())#获取当前服务器cpu核数
测试结果:
4
print(os.system(os.getcwd()))#执行系统命令
测试结果:
sh: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4: is a directory
32256
print(os.popen('ifconfig').read())#执行命令并读取执行结果

测试结果:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000
……
os.open('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/123.py', os.O_CREAT)#os.O_CREAT创建并打开一个新文
os.remove('内置函数.txt')#删除文件
os.rmdir(r'wang/xiao')#删除文件空文件夹(非空删除时报错)
print(os.path.getsize('map和filter.py'))#获取文件大小

测试结果:
697
#获取指定目录下的所有文件及文件夹
for a,b,c in os.walk('/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4'):
    print('当前文件夹为:',a)
    print('当前文件夹下的目录为:',b)
    print('当前文件夹下的文件为:',c)

测试结果:
当前文件夹为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4
当前文件夹下的目录为: ['test', 'wang']
当前文件夹下的文件为: ['内置函数.py', 'map和filter.py', 'os模块.py', '函数.py', '时间戳.py']
当前文件夹为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/test
当前文件夹下的目录为: []
当前文件夹下的文件为: []
当前文件夹为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang
当前文件夹下的目录为: ['test1']
当前文件夹下的文件为: []
当前文件夹为: /Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/test1
当前文件夹下的目录为: []
当前文件夹下的文件为: []
#指定一个目录,然后找到这个目录下有哪些文件, .mp4 .avi

#1、获取这个目录下有哪些文件 os.walk()
#2、判断文件名是否以.mp4/.avi结尾

import os
def showFile(path,str):
    for a,b,c in os.walk(path):
        for f in c:
            if '.' + f.split('.')[-1] in list(str.split(',')):
                print(f)

path = input('请输入你要查找的目录:')
str = input('请输入您要查找的文件后缀,不同后缀用逗号隔开(如:.mp4,.vep):')


showFile(path,str)


测试结果:
请输入你要查找的目录:/Users/wangxiaoyu/
请输入您要查找的文件后缀,不同后缀用逗号隔开(如:.mp4,.vep):.mp4,.vep
cnz-内置函数.vep
cnz-os模块.vep
cnz-递归.vep
# 拼接路径
print(os.path.join('/users','wangxiaoyu','PycharmProjects','python_automated_development','day4','wang','666.py'))

测试结果:
/users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/666.py
# 案例
#/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang
def register():
    path = '/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang'
    username = input('username:')
    abs_path = os.path.join(path,username)#join拼接
    print('拼接后abs_path的路径为:',abs_path)
    with open(abs_path, 'w') as f:
        f.write('666')

register()

测试结果:
username:bbb.py
/Users/wangxiaoyu/PycharmProjects/python_automated_development/day4/wang/bbb.py

8、time模块

#时间戳   从计算机诞生的那一天到现在过了多少秒
#格式化好的时间

import time

print(time.strftime('%Y-%m-%d %H:%M:%S'))#获取当前时间并以指定格式展现

测试结果:
2019-06-21 10:29:53
print(time.time())#获取当前时间戳,单位是秒

测试结果:
1561084244.9605918
# 通过时间戳获取时间元组,标准时间区的时间和本地时间区的时间,两者差了8小时
print(time.gmtime(1561084244))#取标准时间区的时间元组
print(time.localtime(1561084244))#取本地时间区的时间元组

测试结果:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=21, tm_hour=2, tm_min=30, tm_sec=44, tm_wday=4, tm_yday=172, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=21, tm_hour=10, tm_min=30, tm_sec=44, tm_wday=4, tm_yday=172, tm_isdst=0)
# 时间戳和格式化时间互相转换
t = time.localtime(1561084244)#先获取本地时间元组
r = time.strftime('%Y-%m-%d %H:%M:%S',t)#把时间元祖转换成格式化好的时间
print(r)

测试结果:
2019-06-21 10:30:44
# 格式化好的时间转换成时间戳
t = time.strptime('2019-06-21 10:30:44','%Y-%m-%d %H:%M:%S')#把格式好的时间转换成时间元组
r = time.mktime(t)#把时间元组转换成时间戳
print(r)

测试结果:
1561084244.0
#把格式化时间转换成时间戳,不传格式化时间则返回当前本地时间时间戳 str='2019-06-21 10:30:44'
def str_to_timestamp(str=None,format='%Y-%m-%d %H:%M:%S'):
    if str:
        t = time.strptime(str,format)
        return time.mktime(t)
    return int(time.time())

print('当前本地时间转换成时间戳后:',str_to_timestamp())
print('2019-06-21 11:16:56转换成时间戳后:',str_to_timestamp('2019-06-21 11:16:56'))

测试结果:当前本地时间转换成时间戳后: 1561087191
2019-06-21 11:16:56转换成时间戳后: 1561087016.0
# 把时间戳转换成格式化时间,不传则返回当前本地时间的格式化时间 timestamp=1561084244
def timestamp_to_str(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
    if timestamp:
        t = time.localtime(timestamp)
        return time.strftime(format,t)
    return time.strftime(format)

print('当前本地时间时间时间戳转换成格式化后的时间:',timestamp_to_str())
print('1561084244转换成格式化后的时间:',timestamp_to_str(1561084244))

测试结果:
当前本地时间时间时间戳转换成格式化后的时间: 2019-06-21 11:19:51
1561084244转换成格式化后的时间: 2019-06-21 10:30:44
 9、模块安装相关知识
模块相关的知识
    #1、报错pip命令没有的
        #1、where pip,如果找不到,去找python的安装目录
        #2、然后把python的安装目录和安装目录下的scripts目录加入到环境变量里面
    #2、Unknown or unsupported command 'install'
        1、先执行 where pip
        2、然后把不是python安装目录下的pip改名,改成其他的就ok了。

#pip install xlrd
#pip install xlwt
#pip install xlutils
#pip install pymysql
#pip install redis
#pip install nnlog

python3的或用pip3
#pip3 install xlrd
#pip3 install xlwt
#pip3 install xlutils
#pip3 install pymysql
#pip3 install redis
#pip3 install nnlog

转载于:https://www.cnblogs.com/xyxts/p/11052933.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值