• python使用笔记006-函数+json操作


    一、函数

    函数:提高代码的复用性

    1.1 函数的定义

     1 def hello():
     2     print('hello')
     3     print('fdsfjslkfs')
     4 
     5 #函数不调用就不会执行
     6 hello()
     7 
     8 def write_file(file_name,content):#形参,形式参数
     9     with open(file_name,'w',encoding='utf-8') as f:
    10         f.write(content)
    11 
    12 
    13 write_file('函数.txt','fdsfslfre分倒是累计额老人家')#实参
    14 
    15 #函数返回值
    16 #函数没有写返回值时,默认返回None
    17 #return:
    18     #1、返回数据
    19     #2、函数里只要遇到return 函数立马执行结束
    20 def read_file(file_name):
    21     with open(file_name,'r',encoding='utf-8') as f:
    22         content = f.read()
    23         return content
    24 
    25 content = read_file('函数.txt')
    26 print(content)

    1.2 函数的参数

     1 def a():#无参数
     2     pass
     3 
     4 def b(name,age):#必填参数,位置参数
     5     pass
     6 
     7 #默认值参数在调用函数时,如果传了参数值,则使用参数值,如果未传参数值,则用默认的参数值
     8 def op_file(file_name,content=None):#默认值参数
     9     with open(file_name,'a+',encoding='utf-8') as f:
    10         if content:
    11             f.write(str(content))
    12         else:
    13             f.seek(0)
    14             result = f.read()
    15             return result
    16 
    17 #可变参数
    18 #1、这个是不是必须传的
    19 #非必传
    20 #2、限制不限制参数的个数
    21 #不限个数
    22 #3、args
    23 #元组
    24 def send_sms(*args):
    25     print(type(args))
    26     print(args)
    27 
    28 send_sms()
    29 #send_sms('198','159')
    30 send_sms('198','159','123','234','432','4342','098','198','159','123','234','432','4342','098')
    31 
    32 
    33 #关键字参数
    34 def test(**kwargs):#传入必须得指定关键字,kwargs是字典
    35     print(kwargs)
    36     print(type(kwargs))
    37 
    38 test(name='xiaolin',age=19,sex='')
    39 
    40 #如果四种参数一起用的话,顺序必须是:必填参数,默认值,可变参数,关键字参数
    41 #必填参数必须写到默认值参数前面
    42 #默认参数必须在可变参数前面
    43 #可变参数必须在关键字参数
    44 def test2(name,content=None,*args,**kwargs):
    45     print(name)
    46     print(content)
    47     print(args)
    48     print(kwargs)
    49 
    50 
    51 def test3(name,phone,qq,addr,sex):
    52     print(name)
    53     print(phone)
    54     print(qq)
    55     print(addr)
    56     print(sex)
    57 
    58 
    59 test3('186','xiaolin','34334','beijing','')#根据定义的参数顺序来传参
    60 test3(phone='123',name='fdsf',qq='re4343',sex='',addr='guangzhou')#指定参数名字来传参,跟参数位置无关
    61 test3('cj001','185134',sex='',addr='guangzhou',qq='r90343')#组合传参
    62 #test3('cj001','185134',sex='男',addr='guangzhou','r90343')#错误,不能这么写

    1.3 函数返回

    返回单个变量

     1 def fun1(): 2 a = 4 3 return a #返回一个参数 

    返回多个变量

    用一个变量来接收,则该参数为元组

    如果用多个变量来接收,方法里定义的变量类型是啥,返回的就是啥

    但是函数返回几个变量,接收的变量也得是几个

    利用的原理是:解包

     1 def fun():
     2     a = 1
     3     b = 2
     4     c = 3
     5     return a,b,c
     6 
     7 #返回结果是元组
     8 result = fun()
     9 print(result)
    10 #也可以用多个变量来接收,但是函数返回几个变量,接收的变量也得是几个
    11 a,b,c = fun()
    12 print(a,b,c)
    13 
    14 #解包
    15 info = ['xiaohei','beijing','haidianqu',19]
    16 name,addr,area,age = info
    17 print(name,addr,area,age)

    1.4 函数小练习

     1 #判断传入参数是否为float类型
     2 #1、传参
     3 #2、把入参转成字符串
     4 #3、判断小数点个数是否为1
     5 #4、判断小数点前面的是否为整数
     6 #5、判断小数后面是否为整数
     7 def is_float(s):
     8     boolean = False
     9     s = str(s)
    10     if s.count('.') == 1:
    11         left,right = s.split('.')#根据小数点进行分割
    12         if right.isdigit() and left.isdigit() and (int(left) != 0 or int(right) != 0):#左边和右边都是小数
    13             boolean = True
    14         if left.startswith('-') and left.count('-') == 1:
    15             num = left[1:]
    16             if num.isdigit() and right.isdigit() and (int(num) != 0 or int(right) != 0):
    17                 boolean = True
    18     return boolean
    19 
    20 
    21 print(is_float(0.12))
    22 print(is_float(1.12))
    23 print(is_float(1))
    24 print(is_float('sss.0001'))
    25 print(is_float('sss.ssss'))
    26 print(is_float(-1.23))
    27 print(is_float('0.0'))
    28 print(is_float('-0.0'))

    执行结果如图所示:

     二、json操作

    json就是一串字符串,如果在操作json时要获取值很难,将json转成字典就很好操作了

     1 import json
     2 #python的数据类型和json互相转换
     3 #json就是一串字符串
     4 d = {'key1':'v1','k2':'v2','k3':'v3','name':'刘婕'}
     5 json_str = json.dumps(d,indent=4,ensure_ascii=False)#字典转成字符串,转成json了
     6 print(json_str)
     7 
     8 #json.dump()将字典转成json,并写入文件中
     9 with open('u2.txt','w',encoding='utf-8') as f:
    10     json.dump(d,f,indent=4,ensure_ascii=False)#indent 缩进,ensure_ascii=False 如果是中文就直接显示中文了
     1 import json
     2 json_str = '''
     3     {
     4     "key1": "v1",
     5     "k2": "v2",
     6     "k3": "v3",
     7     "name": "刘婕"
     8 }
     9 '''
    10 dic = json.loads(json_str)#json字符串转字典
    11 print(dic)
    12 
    13 #如果json不合法,就会报错
    14 #比如json中有单引号
    15 json_str1 = '''
    16     {
    17     'key1': "v1",
    18     "k2": "v2",
    19     "k3": "v3",
    20     "name": "刘婕"
    21 }
    22 '''
    23 dic1 = json.loads(json_str1)#会报错,报json格式不对
    24 print(dic1)
    25 
    26 with open('users.txt') as f:
    27     result = json.load(f)  #先读取文件内容,再将json转成字典
    28     print(result)

    报错如图所示:

     要查看json字符串格式是否正确,可以在下面网站进行查看

    http://www.bejson.com/

    三、其他知识点

    3.1 交换变量的值

    1 a = 1
    2 b = 2
    3 c = 3
    4 a,b = b,a#交换两个变量的值
    5 a,b,c = c,a,b#交换三个变量的值
    6 print(a,b,c)

    3.2 三元表达式

    1 #三元表达式
    2 n = 2
    3 sex = '' if n == 1 else ''
    4 print(sex)

    3.3 列表生成式

    1 #列表生成式
    2 l = [1,2,3,4,5,6,7,8,9,12,13,14,45,98,34,23,90]
    3 l2 = [str(i)+'km' for i in l]
    4 l3 = [str(i)+'km' for i in l if i >= 30]
    5 print(l2)
    6 print(l3)
  • 相关阅读:
    Request Payload 和 Form Data 的区别
    es6 字符串模板拼接和传统字符串拼接
    TypeScript
    Jquery的$(document).click() 在iphone手机上失效的问题
    Vuex 是什么?
    什么是JSONP?
    git 放弃本地修改操作
    CSS3+HTML5+JS 实现一个块的收缩&展开动画
    Promise学习笔记(一)
    React@16.13.1配合antd UI使用,自定义主题
  • 原文地址:https://www.cnblogs.com/cjxxl1213/p/12814671.html
Copyright © 2020-2023  润新知