美文网首页python
Python函数传参

Python函数传参

作者: 北沐城歌__ | 来源:发表于2021-07-04 18:39 被阅读0次
  • 函数代码块以def关键字开头,后接函数标识符名称和圆括号()
  • 所有传入的参数和自变量都必须放在圆括号内,可以在圆括号中定义参数。
  • 函数的第一行语句可以选择性使用文档字符串,用于存放函数说明。
  • 函数内容以冒号:开始,并且要缩进。
  • return [表达式]结束函数,选择性返回一个值给调用方。不带表达式的return相当于返回None。
  • return有两个作用:
    用来返回函数的运行结果,或者调用另外一个函数。
    函数结束的标志。只要运行了return,就强制结束了函数。return后面的程序都不会被执行。其实,函数不一定有返回值。什么都不返回的函数不包含return语句,或者包含return语句,但没有在return后面指定值。

if __name____=='___main____' 具体介绍:案例说明

1-先创建一个file.py的文件
pi=3.1415926
def file():
    print('圆周率是: %s' %(pi)) #格式化输出
file()
#输出为:圆周率是:3.1415926
2-在创建另外一个file2.py的文件 ,调用file的pi的值,
两个文件在一个路径下:
from file import pi
def calc_round(rad):                    #定义圆形面积求解函数
    return pi * (rad ** 2)
def run():
    print ("圆形面积为:",cale_round(5))  #调用函数
run()
#输出为: 圆周率是:3.1415926
#圆形面积为:78.539815
可以看出来把“ 圆周率是:3.1415926” 这个也输出来了。
因为第一个程序里面没有加入if __name__ == '__main__',
3-增加第一个file.py的函数的主函数判断:
pi=3.1415926
def file():
    print('圆周率是: %s' %(pi)) #格式化输出
if __name__ == '__main__':
   file()
4-在运行file2.py 可以看出只有 “圆形面积为:78.539815”这一条输出了。

1.直接运行:就是直接运行.py文件,name也就是main.程序运行。
2.模块导入:就是被当成模块导入到其他python文件中使用,name为模块的名字。
所以,if ___name____ == '____main____' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行.


基础传参
定义传参:
def  get_info(name,age): 
  print('%s is %s years old' %(name,age)) #格式化输出
if __name__=='__main__:'
  get_info('bob',25)
  get_info(name='bob',age=25) #这种方法也可以
#输出为:bob is 25 years old

非定义传参,多个传参,需要通过*元组或者**字典来定义:
def fun1(*args):  #args 是元组
  print(args)
def fun2(**kwargs): #kwargs是表示字典
  print(kwargs)
def fun3(*args,**kwargs):
  print(args,kwargs)
if __name__=='__main__':
  fun1()
  fun1('hao')
  fun1('hao',123)
  fun1('hao',123,'hello')
  fun2(name='wang',age=27)
  fun3('hao',name='wang',age=27)
#输出为:age(‘hao’)
#('hao',123,'hello')
#('name':'wang','age':27)
#(‘hao’,){name='wang',age=27}
列表字典传参
def add(x,y):
  print(x+y)
def get_info(name,age):
  print('%s is %s years old ' % (name,age))
if __name__=='___main__':
  nums =[10,5]
  add(nums[0],nums[1]) #第一种方法传递
  add(*num) #第二种方法将列表插开依次传参
  get_info(age=27,name='wang')
  user = {'name':'wang','age':27}
  get_info(**user) #将字典插开,拆成key=value的形式进行传参
#输出为:15
#wangh is 27 years old 
举例说明,在python核心编程第二版有个这个样的例子:
from random import randint,choice
from operator import add,sub
def add(x,y):
    return x + y
def sub(x,y):
    return x - y
def  exam():
       cmds={'+':add,'-':sub}
       #cmds = {'+':lambda x,y:x + y,'-':lambda x,y : x - y} #通过把匿名函数放到里面
       nums = [randint(1,100) for i in range(2)] #从1到100,随机出来2个
       nums.sort(reverse=True) #默认是False ,实现降序的排列
       op = choice('+-')
       result = cmds[op](*nums)
       prompt = '%d  %s %d =' %(nums[0],op,nums[1])
       counter = 0
       while counter < 3:
            try:  #不显示错误类型,错误类型是空白,如果不是数字的话,则继续
                answer = int(input(prompt))
            except:
                  continue
           if answer  == result:
              print("very good")
              break
          else:
              print('wrong answer')
          counter +=1
       else:
              print("the answer:")
              print('%s %s' % (prompt,result))

if __name__ =='__main__':
    while True:
            exam()
            try:
                  #去除两边的空白,然后在取出第一个字符
                  yn = input('continue(y/n)?').strip()[0].lower() #把字母变成小写
            except IndexError:  #按回车是indexError,默认是y
                  continue
            except (KeyboardInterrupt, EOFError): #按ctrl +c  或者 ctrl + d 的错误类型
                  yn = 'n'  #默认为n
           if yn in 'nN':
              print('\nBye-bye')
              break


高阶传参
通过函数 filter() 函数来调用函数,参数也是函数
通过函数 map() 函数来调用函数。
from random import randint 
def func1(x):
  return x % 2  #求偶数
def func2(x):
return x * 2 +1 
if __name__ == '__main__':
  nums=[randint(1,100) for i in range(10)]  #随机在1-100中选择10个数字
  print(nums)
  print(list(filter(fun1,nums))) 
#filter()要求第一个是函数,第二个充当x传递函数,返回True保留,返回False过滤掉
  print(list(filter(lambda x : x % 2,nums)))  #通过匿名函数来定义输出
  print(list(map(func2,nums)))
  print(list(map(lambda x:x * 2 +1,nums))) #通过匿名函数来定义

#输出结果为:
[8,44,21,23,44,55,67,33,2,1]
[35,51,7,69]
[35,51,7,69]
[39,65,33,11,33,57,13,79,91,43]

文件传参
通过运行一个file.py文件,来修改里面的内容
python file.py  file.txt True  False   
将file.txt里面的内容的 True 更改为 False
file.txt 为file1
True     为file2 
False    为file3

from os import remove,rename
from shutil import copy,copy2
from time import strftime,localtime
from sys import argv 
localtime = strftime("%Y%m%d", localtime())

def word(file1,file2,file3):
    file2 = file1 + '.bak' + localtime
    tmp_file = file1 + '.temp'
    copy2(file1, file2) #拷贝一个源文件
    with open(file1, mode='r') as fr, open(tmp_file, mode='w') as fw:
        for line in fr:
            if file2 in line:
                fw.write(line.replace(file2, file3))
            else:
                fw.write(line)
                print("已将%s替换为%s"%(file2,file3))
    remove(file1)
    rename(tmp_file, file1)
    return


if __name__ == "__main__":
  try:
    if len(sys.argv)  == 4:
        file1, file2, file3 = sys.argv[1:] #从左到右进行切片,分别给三个赋值
        word(file1, file2, file3)
    else:
        print("传参失败,请确定参数是否正确")
  except (KeyboardInterrupt,EOFError,ValueError):
      print("请输入正确参数")
   #python 中也可以使用 sys 的 sys.argv 来获取命令行参数:
   #sys.argv 是命令行参数列表。
   #len(sys.argv) 是命令行参数个数。
   #sys.argv[0] 表示脚本名


相关文章

  • python函数

    python函数 什么是函数 函数语法 调用函数 函数参数形参与实参传参指定参数传参参数默认值可变参数参数解包参数...

  • Python的函数返回值返回的是值还是引用?

    关于Python函数传参是传值还是传引用?这一问题网上都有很多的讨论,这篇博客解释比较清楚,结论是:Python参...

  • python函数传参

    * 和** test(*args)* 的作用其实就是把序列args中的每个元素,当作位置参数传进去。*所对应的形参...

  • Python函数传参

    函数代码块以def关键字开头,后接函数标识符名称和圆括号() 所有传入的参数和自变量都必须放在圆括号内,可以在圆括...

  • Python共享传参

    函数的参数作为引用 Python 唯一支持的参数传递是 共享传参 ,也就是常说的引用传参。函数内部的形参是实参的别...

  • 研究Python中函数的传参方式

    注:原创研究目的:研究Python中函数的传参方式:传值、传地址研究对象:Python的list和Numpy的ar...

  • 19-3-18 python函数传参方式

    python函数传参跟js很像: 直接传参方式: 形参实参按顺序一一对应,跟js一样 指定传参 参数顺序不用一一对...

  • Python脚本传参(argparse模块)2022-08-23

    Python传参 简便版 进阶版 Python使用argparse模块传参 Python系统自带的传参用到sys模...

  • 函数

    简单函数格式 定义 调用函数 传参函数格式: 传参数 定义 注意 重点 实例(简单) 实例(传参) 实例函数(调用...

  • Python参数传递小结

    2016.06.14更新:又踩坑了,百度后得到解决,参考链接:python:函数传参是否会改变函数外参数的值 入参...

网友评论

    本文标题:Python函数传参

    本文链接:https://www.haomeiwen.com/subject/bsumultx.html