Python基础函数

68次阅读

共计 4813 个字符,预计需要花费 13 分钟才能阅读完成。

函数也称方法,是用于实现特定功能的一段代码
函数用于提高代码的复用性
函数必须要调用才会执行
函数里面定义的变量,为局部变量,局部变量只在函数里面可以使用,出了函数外面之后就不能使用
一个函数只做一件事情

import json
def get_file_content(file_name): #形参
    #入参:传入一个文件名
    #返回:文件内容转成字典并返回
    with open(file_name, encoding='utf-8') as f:
        res = json.load(f)
        return res
abc = get_file_content('stus.json') #函数调用才执行,此处传入实参, 函数有返回,需要用变量接收
print(abc)
def write_file(filename,content):
    with open(filename,'w', encoding='utf-8') as f:
        #f.write(json.dumps(content))
        json.dump(content,f,ensure_ascii=False,indent=4)
dict = {'name':'wrp','age':'18'}
write_file('wrp.json',dict)
'''
作业:1、实现一个商品管理的程序。#输出 1,添加商品 2、删除商品 3、查看商品
        添加商品:商品的名称:xxx  商品如果已经存在的话,提示商品商品已经存在
            商品的价格:xxxx 数量只能为大于 0 的整数
            商品的数量:xxx,数量只能为大于 0 的整数
        2、删除商品:输入商品名称:iphone 如果输入的商品名称不存在,要提示不存在
        3、查看商品信息:输入商品名称:iphone:价格:xxx
                    数量是:xxx
                all:print 出所有的商品信息 
'''FILENAME ='products.json'

import json
def get_file_content():
    with open(FILENAME, encoding='utf-8') as f:
        content = f.read()
        if len(content) > 0:
            res = json.loads(content)
        else:
            res = {}
    return res

def write_file_content(dict):
    with open(FILENAME,'w',encoding='utf-8') as fw:
        json.dump(dict, fw, indent=4, ensure_ascii=False)

def check_digit(st:str):
    if st.isdigit():
        st = int(st)
        if st > 0:
            return st
        else:
            return 0
    else:
        return 0
def add_product():
    product_name = input("请输入商品名称:").strip()
    count = input("请输入商品数量:").strip()
    price = input("请输入商品价格:").strip()
    all_products = get_file_content()
    if check_digit(count) == 0:
        print("数量输入不合法")
    elif check_digit(price) == 0:
        print("价格输入不合法")
    elif product_name in all_products:
        print("商品已经存在")
    else:
        all_products[product_name] = {"count":int(count),"price":int(price)}
        write_file_content(all_products)
        print("添加成功")

def del_product():
    product_name = input("请输入要删除的商品名称:").strip()
    all_products = get_file_content()
    if product_name in all_products:
        all_products.pop(product_name)
        print("删除成功")
        write_file_content(all_products)
    else:
        print("商品不存在")

def show_product():
    product_name = input("请输入要查询的商品名称:").strip()
    all_products = get_file_content()
    if product_name == 'all':
        print(all_products)
    elif product_name not in all_products:
        print("商品不存在")
    else:
        print(all_products.get(product_name))

拷贝

浅拷贝,内存地址不变,把两个对象指向同一份内容,
深拷贝,会重新在内存中生成相同内容的变量

l = [1,1,1,2,3,4,5]
l2 = l #浅拷贝
#l2 = l.copy() #浅拷贝 
for i in l2:
    if i % 2 != 0:
        l.remove(i)
print(l)
#在此程序中,如果对同一个 list 进行遍历并删除,会发现结果和预期不一致,结果为[1,2,4],使用深拷贝就没问题
import copy
l = [1,1,1,2,3,4,5]
l2 = copy.deepcopy(l) # 深拷贝
for i in l2:
    if i % 2 != 0:
        l.remove(i)
print(l)

非空即真,非零即真

name = input('请输入名称:').strip()
name = int(name) #输入 0 时为假
if name:
    print("输入正确")
else:
    print("name 不能为空")

默认参数

import json
def op_file_tojson(filename, dict=None):
    if dict: #如果 dict 传参,将 json 写入文件
        with open(filename,'w',encoding='utf-8') as fw:
            json.dump(dict,fw)
    else: #如果没传参,将 json 从文件读出
        f = open(filename, encoding='utf-8')
        content = f.read()
        if content:
            res = json.loads(content)
        else:
            res ={}
        f.close()
        return res

校验小数类型

def check_float(s):
    s = str(s)
    if s.count('.') == 1:
        s_split = s.split('.')
        left, right = s_split
        if left.isdigit() and right.isdigit():
            return True
        elif left.startswith('-') and left[1:].isdigit and right.isdigit():
            return True
        else:
            return False
    else:
        return  False

print(check_float('1.1'))

全局变量

def te():
    global a
    a = 5
    
def te1():
    c = a + 5
    return c

res = te1()
print(res) #代码会报错,te()中定义的 a 在函数没被调用前不能使用
money = 500
def t(consume):
    return money - consume
def t1(money):
    return  t(money) + money

money = t1(money)
print(money) #结果为 500
name = 'wangcai'
def get_name():
    global name
    name = 'hailong'
    print('1,函数里面的 name', name)
def get_name2():
    print('2,get_name2', name)

get_name2() #wangcai
get_name() #hailong
print('3,函数外面的 name', name) #hailong

递归

递归的意思是函数自己调用自己
递归最多递归 999 次

def te1():
    num = int(input('please enter a number:'))
    if num%2==0: #判断输入的数字是不是偶数
        return True #如果是偶数的话,程序就退出,返回 True
    print('不是偶数,请重新输入')
    return  te1()# 如果不是的话继续调用自己,输入值
print(te1()) #调用 test1

参数

位置参数

def db_connect(ip, user, password, db, port):
    print(ip)
    print(user)
    print(password)
    print(db)
    print(port)

db_connect(user='abc', port=3306, db=1, ip='192.168.1.1', password='abcde')
db_connect('192.168.1.1','root', db=2, password='123456', port=123)
#db_connect(password='123456', user='abc', 2, '192.168.1.1', 3306) #方式不对,位置参数的必须写在前面,且一一对应,key=value 方式必须写在后面

可变参数

def my(name, sex='女'):
    #name,必填参数,位置参数
    #sex,默认参数
    #可变参数
    #关键字参数
    pass
def send_sms(*args):
    #可变参数,参数组
    #1. 不是必传的
    #2. 把传入的多个元素放到了元组中
    #3. 不限制参数个数
    #4. 用在参数比较多的情况下
    for p in args:
        print(p)


send_sms()
send_sms(123456)
send_sms('123456','45678')

关键字参数

def send_sms2(**kwargs):
    #1. 不是必传
    #2. 不限制参数个数
    #3.key=value 格式存储
    print(kwargs)

send_sms2()
send_sms2(name='xioahei',sex='nan')
send_sms2(addr='北京',county='中国',c='abc',f='kkk')

集合

集合,天生可以去重
集合无序,list 有序

l = [1,1,2,2,3,3,3]
res = set(l) #将 list 转为 set
l = list(res) #set 去重后转为 list
print(res)
print(l)
set = {1,2,3} #set 格式

jihe = set() #定义一个空的集合

xn=['tan','yang','liu','hei']
zdh=['tan','yang','liu','jun','long']

xn = set(xn)
zdh = set(zdh)
# res = xn.intersection(zdh) #取交集
# res = xn & zdh #取交集

res = xn.union(zdh) #取并集
res = xn | zdh #取并集
res = xn.difference(zdh) #取差集,在 A 中有,在 B 中无的
res = xn - zdh #取差集

res = xn.symmetric_difference(zdh) #对称差集,取两个中不重合的数据
res = xn ^ zdh
print(res)
import string
l1 = set(string.ascii_lowercase)
l2 = {'a','b','c'}
print(l2.issubset(l1)) #l2 是不是 l2 的子集
print(l2.issuperset(l1)) #l2 是不是 l2 的父集
print(l2.isdisjoint(l1)) #是否有交集,有则 Flase,无则 True

l2.add('s') #添加元素
print(l2)
print(l2.pop()) #随机删除一个元素
l2.remove('a') #删除指定元素
for l in l2:
    print(l)

正文完
 0

python基础-函数

68次阅读

共计 1235 个字符,预计需要花费 4 分钟才能阅读完成。

  1. 描述

    • 函数是抽象的第一步
     函数多是为了实现特定功能的代码的集合
    需要考虑的是:函数的参数
        函数的功能
        函数的返回值
    python 的函数 参数传递默认是引用传递 
    • 建议不要直接修改传入对象
    def my_power(x, n=2):
        while n > 0
            a = x * a
            n = n - 1
        return a
    my_power(3)
  2. 定义函数

    • 标准的定义和调用
    # 文档
    def my_abs(x):
        '这是 my_abs 函数的文档'
        if x > 0:
            return x
        else
            return -x
    a = my_abs(-5)
    print(a)
    #切记写函数文档
    print(my_abs.__doc__) #打印文档 
    • 空函数
    def empty_fun():
        pass
    • 多返回值
  3. 函数参数

    • 位置参数 默认参数
    # 计算 1 到任意值相加的和
    def my_add(b=10):
        sum = 0
        while b > 0:
            sum = sum + b
            b = b - 1
        return sum
    my_add()
    • 可变参数
    # 传入参数的个数是可变的 比传入数组要高级
    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum + n * n
        return sum
    calc(1,2,4,3)
    nums = [1,2,3,4]
    calc(*nums)
    nums = (1,2,3,4)
    calc(*nums)
    #类型转换 实现可变的 tuple
    a = (1,2,3,4)
    def changes(position, v, *a):
        b = list(a)
        position = int(position)
        b[position] = v
        c = tuple(b)
        return c
    c = changes(3, 5, *a)
    print(c)
    #** 和 *,猩猩是字典,星是元组 
    • 关键字参数
    # 传入多个含有参数名的参数 会在内部自动组装成一个字典
    def person(name, age, **k):
        #print('name:', name, 'age:', age, 'k:', k);
        print('name is %s age is %d'%(name,age))
    
    person('mengyaun', 15, city='河南', sex=1)
    dit = {'city'='河南', 'sex'=1}
    person('mengyuan', 15, **dit)
    • 命名关键字参数
    # 可以说是对关键字参数的一种改进 添加限制不能随意传入
    def person(name, age, *, city, sex):
        print('name is %s age is %d city is %s sex is %d'%(name,age, city, sex))
    
    person('mengyaun', 15, city='河南', sex=1)
    
    # 如果有可变参数就不用再加 *
    def person(name, age, *args, city, sex):
        print('name is %s age is %d city is %s sex is %d'%(name,age, city, sex))
    
    #person('mengyaun', 15, city='河南', sex=1)
    person('mengyaun', 15, '河南', 1) # error
    
    # 可以有默认值 

正文完
 0