函数

函数:提高代码的复用性,让代码更简洁(函数、方法、功能指的都是函数)

函数名一定要见名知意

#return

1

 

def say hello():  #定义函数名

          print('hello') #函数体

函数不调用是不会被执行的

调用函数

say hello( ) #调用函数

实现乘法计算:

def call(a,b): #形参,形式参数、位置参数、必填参数
res=a*b
print('%s*%s=%s'%(a,b,res))
call(7,8) #实参,实际参数

局部变量:函数里面定义的变量只能在函数里面用,出了函数就不能用了;return=res #调用完函数之后,返回什么结果

返回的结果如何获取到:res=op_file('a.txt') #res接受的是函数的返回值 print(res);如果不使用return返回,print(res)=None

修改文件的函数:

def op_file(file,connect=None):
    if connect:
        with open(file,'a+',encoding='utf-8') as f:
            f.seek(0)
            f.write(connect)
            f.flush()
    else:
        with open(file,encoding='utf-8') as f:
            res=f.read()
            return res
res=op_file('a.txt')
print(res)

结束函数用法:最终打印出来的结果是:0,1,2,3

def haha():
    for i in range(5):
        print(i)
        if i==3:
            return
haha()

最终结果:500

money=500

def test(consume):
    return money-consume
def test1(money):
    return test(money)+money
money=test1(money)
print(money)

 

常量 :大写字母定义的就是常量,常量就是不会变化的;

PORT=3306

FILENAME='user.txt'

全局变量:公共的变量,都可以用的变量

 想改全局变量,需要先声明 一下,你修改的值是全局变量

全局变量会一直占着内存,直到程序运行完才释放,所以尽量不用全局变量;

def sayname():
    global name
    name='刘伟'
    print('name1',name)
    name='李西囊'
    return name
res=sayname()
print(res)

结果:
name1 刘伟
李西囊

一种按位置顺序传参,一种按参数名传参,按参数名传参可以不考虑顺序

def op_mysql(host,port,username,password,db,charset,sql):
    print('连接数据库')
op_mysql(
    '192.168.1.1',
    3306,'root','123456','jxz','utf-8','select')
op_mysql(
    '192.168.1.1',
    db='sfsdf',
    charset='sdfsdf',
    sql='select * from user;'
         )

 

 

函数不固定参数

def syz(*args):#参数组:
           username=args[]
           pwd=args[1]
           age=args[2]
 
syz()
syz('niuhanyan','2324')
syz('is','sdf')

关键字参数

def sys2(**kwargs): #关键字参数
           pring(kwargs)

syz2()
syz2(name='nhy',age=38)
syz2(name='nhy',age=38,addr='回龙观,home='河南')
syz2('nhy')
1、必须指定XX='XXX'
def syz(a,*args):  #参数组
    print(a)
    username = args[0]
    pwd = args[1]
    age = args[2]

# syz('niuhanyang','2423',2323)
# syz('1s','sdf')
def syz2(time,**kwargs):  #关键字参数
    print(kwargs)

syz2('sdf')
syz2(name='nhy',age=38,time='20180912')
syz2('2018',name='nhy',age=38,addr='回龙观',home='河南')
syz2(time='xx',xx='xxx')

#1、必填参数还是非必填的
#2、它有没有限制参数个数
#3、它是把传过来的参数放到哪里

 

递归

函数自己调用自己就叫递归,可以实现循环功能,但递归的效率不高,写代码少用递归,递归最大循环次数是999次

i=0

def test():

   global i

     i+=1

    print(i)

    test()

test()

# def say():
#     num1=1
#     num2=2
#     num3=3
#     return num1,num2,num3,4
# res=say()
# print(res)
#1、函数如果返回多个值的话,会把值放在元组里面
#结果:(1, 2, 3, 4)

def say():
    num1=1
    num2=2
    num3=3
    return num1,num2,num3
res1,res2,res3=say()
print(res1)
print(res2)
print(res3)

#结果:
1
2
3

字典排序

d={'a':8,'b':2,'c':3} #字典是无序的,直接对字典排序是不存在的
res=sorted(d.items(),key=lambda x:x[1])#下标取1是对值进行排序,0是对key进行排序
print(res)
for k,v in res:
    print(k,v)

# #匿名函数,这个函数功能很简单,只用一次
# res=lambda x:x+1
# res(1)
# print(res(1))

import random

red_num=random.sample(range(1,34),6)
new_num=[str(num).zfill(2) for num in red_num] #列表生成式
l=[i for i in range(1,101,2)]
print(new_num)

#内置函数
#zip
# l1=['a','b','c','d','e','f','g']
# l2=[1,2,3,4,5,6,7]
# print(list(zip(l1,l2)))
#
# for a,b in zip(l2,l1):
#     print(a,b)
#zip,就是把俩list合并到一起,把两个一维数组变成二维数组

    #a 1
    #b 2
    #c 3

#
# new_lis=[]
# def my(num):
#     return str(num)
# lis=[1,2,3,4,5,6,7,8,9]
# res=list(map(my,lis))
# print(res)
#效果相同,map的功能就是帮你自动循环调用函数
# for i in lis:
#     new_lis.append(my(i))
# print(new_lis)


#filter 也是帮你循环调用函数的,过滤

def even(num):
    if num%2==0:
        return True
    return False
lis=[1,2,3,4,5,6,7,8,9]
res=filter(even,lis) #filter只保留返回为真的数据
print('filter..',list(res))
res2=map(even,lis) #循环调用函数,返回什么,就保存什么
print('map...',list(res2))

#结果:
#filter.. [2, 4, 6, 8]
#map... [False, True, False, True, False, True, False, True, False]

 

posted @ 2019-01-17 14:20  小蕊-zr  阅读(170)  评论(0编辑  收藏  举报