• python函数


    1、函数:

      函数就是一个功能,一个方法,作用简化代码

    2、定义一个函数:

      def 函数名():

       函数体

      函数必须得调用才会执行

      调用函数:

      函数名()

    1 def say():    #定义函数
    2     print('这是一个函数')    #函数体
    3 
    4 say()    #调用函数

    3、参数:

      def say(形参):  #形参,形式参数,变量

        print('%s哈哈哈'%name)

      say(实参)    #传进去的值是实参,实际参数

    1 def say(name):    #定义函数,有形参
    2    print('%s在学习函数'%name)    #函数体
    3 say('saki')    #调用函数,传参数

    必填参数,位置参数

    1 def say(name,sex):    #定义函数,两个形参
    2     print('%s在学习函数 sex:%s'%(name,sex))    #函数体
    3 x='saki'    #可以定义两个变量
    4 y=''
    5 say(x,y)    #调用函数,传变量参数

    非必填参数,默认值参数,添加默认值,不传就取默认值

    1 def say(name,sex=''):    #定义函数,两个形参,给其中一个形参填写默认值
    2     print('%s在学习函数 sex:%s'%(name,sex))    #函数体
    3 x='saki'    #可以定义两个变量
    4 y=''
    5 say(x)    #调用函数,传变量参数,只传一个

     4、小练习1:

      写一个计算器,存款有8000元,每个月赚1000元,一共开13个月的工资,现要求把存款和13个月工资加起来。

    1 def calc(a,b):   #定义一个函数,定义两个参数
    2     res = a*b    #计算13个月总工资 
    3     return(res)  #返回res结果
    4 cur_money=8000   #存款
    5 nx=calc(1000,3)  #年薪
    6 calc(nx+cur_money)#年薪+存款

    5、return 

      在函数里面的变量全都是局部变量,它只能在函数里面用,函数执行结束那么就没有这个变量了,所以我们需要返回,使用return关键字,调用函数后,返回结果。

      函数在不写return的时候,会返回None。

      函数里面如果碰到return,函数立即结束

    1 def my():
    2     for i in range(100):
    3         print(i)
    4         if i==2:
    5             return
    6 print(my())

    结果:0 1 2 None

    7、小练习2:

      校验输入的字符串是否是一个合法的小数的程序

      思路:

      ①合法的小数有 正小数,负小数 0.12  -12.3

      ②只有一个小数点,判断小数点个数

      ③正小数的情况下:小数点左边和右边都是整数

      ④负小数的情况下:小数点右边是一个整数,左边必须以负号开头,只有一个负号,并且是整数,使用切片[1:]

     1 def check_float(s):      #定义一个函数,定义一个参数
     2    s=str(s)          #将传进来的值全都改为字符串
     3    if s.count('.')==1:    #判断是否只有一个小数点
     4       s_list=s.split('.')  #只有一个小数的时候,对它进行分割
     5       left=s_list[0]      #取小数点左边的数
     6       right=s_list[1]     #取小数点右边的数
     7       if left.isdigit() and right.isdigit():        #判断如果left和right 都是数字(正小数)
     8          return True
     9       if left.startswith('-') : #判断left是否以负号开头并且是否只有一个负号(负小数)
    10          if left[1:].isdigit() and right.isdigit():   #判断left下标1开始到结束是否都是整数,并且判断右边是否都是整数,可以跟上一行写在一起 
    11          return True
    12    return False
    13 print(check_float(-3.5))
    14 print(check_float(-50.3))
    15 print(check_float('-s.5'))
    16 print(check_float('-5.w5w8'))

    结果:

      

    8、文件操作

    1 def my_file(name,content=None):  #定义一个函数,传两个形参,文件名和文件内容
    2    with open(name,'a+') as f:    #打开文件,以a+的形式打开
    3       f.seek(0)    #将指针移到最前面的位置
    4       if content:     #判断content是否传值
    5          f.write(content)     #content有内容就将它写进文件
    6       else:
    7          return f.read()       #如果没有传值,读取文件内容
    8 str='aaa'    #定义一个字符串
    9 print(my_file('email.txt',str)) #调用函数,传值将内容写入文件,返回None,没传值,读取文件内容

     9、FILE_NAME='good.json' 全部大写字母表示常量

    10、局部变量和全局变量

        在函数里面定义的变量都是局部变量,除了函数之外的都不能直接使用

        在文件最上面定义的这个变量就是全局变量

    1 name='小黑'      #定义全局变量
    2 def test():      #定义一个函数
    3     global name   #声明修改全局变量
    4     name='小白'    #修改name的值
    5     print(name)    
    6 test()          #调用函数

    11、小练习1

    1 money=500                #定义变量money=500
    2 def test(consume):        #4、进入该函数
    3     return money-consume       #5、money=500减掉consume=500,所以等于0
    4 def test1(money):         #2、进入该函数
    5     return test(money)+money   #3、调用test(),参数值为500    6、test(money)的值为0+money(500) =500
    6 money=test1(money)          #1、首先调用test1()函数,传入money=500
    7 print(money)            #7、所以最后结果为500

    12、小练习2

      这个练习的结果是什么?

    1 def test():
    2     global a
    3     a=5
    4 def test1():
    5     c=a+5
    6     return c
    7 res=test1()
    8 print(res)

      

    练习的结果报错,提示'a'没有被定义。test()这个函数并没有被调用,a没有被定义,程序找不到a

    所以需要调用一下test(),让它把全局变量定义了,正确书写如下:

    1 def test():
    2     global a
    3     a=5
    4 def test1():
    5     c=a+5
    6     return c
    7 test()   #调用test()函数
    8 res=test1()
    9 print(res)

    13、小练习3

    这个练习的结果是什么?

    1 d={'name':'abc'}
    2 def my():
    3     d['sex']=29
    4     print(d)
    5 my()
    6 print(d)

    字典和list,这种可变变量,不需要用global来声明,就可以直接改了

    14、可变参数

      可变参数,参数组,参数多的情况下可以使用*args(args为参数名,可修改,一般都使用args)

    1 def send_mail(*email):  #参数名前加*号
    2     print('email..',email)
    3 send_mail('niu@163.com')
    4 send_mail('niu@163.com','lxy@qq.com','zyf@126.com')
    5 send_mail()

    问题:1、是否必填?          非必填

       2、有没有参数个数限制?  没有限制

    结果:

    1 def run(name,age=29,*args):
    2     print(name)
    3     print(age)
    4     print('args..',args)
    5 run('lcx',29,'beijing','tiantongyuan')

    结果:

    可以看到,给了name的值和age的值,后面两个值没有对应的参数接收,于是全部都归到*args里

    15、关键字参数

    1 def op_db(ip,port,db,user,passwd,sql):
    2     print('链接mysql操作数据库')
    3     pass
    4 
    5 op_db('192.168.1.12',3306,'xxx','ddd','ddd','ddd')#这种必须按照固定位置传参数
    6 op_db(db='jxz',ip='192.168.1.1',sql='selecr',port=3306,user='xxx',passwod='aaa') #这时候用到关键传参,不需要按照顺序传参,指定哪个关键字传哪个关键字

    16、参数

      参数分为:

        位置参数:必填参数

        默认值参数:非必填参数

        可变参数:非必填参数,不限制参数个数

        关键字参数:非必填参数,将值都放在字典里

      四种参数如果同时使用,必须按照由上到下的顺序进行传值,否则会报错。

    17、**kwargs

      **kwargs:两个*号,不限制参数个数,并且将值都放在字典里

    1 def my(name,sex='',*args,**kwargs): 
    2     print(name)
    3     print(sex)
    4     print(args)
    5     print(kwargs)
    6 my('xiaohei','hhh','args','args2',k='1',k2='v2')

    18、递归

      递归:函数自己调用自己,递归最多循环999次,超过999次就会报错

    1 count=0
    2 def add():
    3     global count
    4     count+=1
    5     print('hhh',count)
    6     add()
    7 add()

    用递归的话,必须得有一个明确的结束条件

    1 def my2():
    2     num=input('输入一个数字:')
    3     num=int(num)
    4     if num%2!=0:
    5         print('请输入偶数')
    6         return my2()
    7     else:
    8         return
    9 my2()

    19、随机取6个1-33的值,个位数前面补0

    方法1:

    1 import random
    2 res=random.sample(range(1,34),6)#range(1,34) 产生一个从1-33的list,不包括34,random.sample 从一个list里面取几个元素
    3 print(res)
    4 for i in range(len(res)):
    5     res[i]=str(res[i]).zfill(2)
    6 print(res)

    方法2:

    列表推导式,列表生成式

    1 import random
    2 res=random.sample(range(1,34),6)
    3 print(res)
    4 res=[str(i).zfill(2) for i in res]
    5 print(res)

    20、生成1000以内的偶数

    1 res=[i for i in range(0,1001,2)]#从0开始到1000,步长为2
    2 print(res)
  • 相关阅读:
    将java库转换为.net库(转载)
    web sql设计器(连接)
    [SQLSERVER]SQL中的全文检索(转邹建)
    网络最经典命令行-网络安全工作者的必杀技
    无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。
    06毕业设计 VB导出Excel文档
    06毕业设计 VB导出word文档
    C# 交替显示项的DataGird,鼠标上移时转变颜色,退出后能恢复原来颜色
    js.offsetParent属性
    自动提醒IE6访客升级浏览器,
  • 原文地址:https://www.cnblogs.com/miyuki/p/9184188.html
Copyright © 2020-2023  润新知