一、参数类型

(一)形参与实参

  • 要使用局部变量时,只能通过return的方式返回
def my(name):
#函数体
return name my('lrx')
#name是形参,lrx是实参
  • 不写返回值的时候,返回的是None
def db_connect(ip,port=3306):
print(ip,port) res= db_connect('xxx.xx.xx.xx',3307)
print(res)
#结果:
#xxx.xx.xx.xx 3307
#None

(二)参数类型

1、位置参数\形式参数

  • 形式参数,也叫位置参数
  • 是必传参数
  • 调用时如果不填实参会报错
def my(name,sex): #name、sex是位置参数,调用时不填会报错
return name my('lrx')
#结果:
#TypeError: my() missing 1 required positional argument
def db_connect(ip,user,password,db,port):
pass
db_connect(user='lrx',ip='xxx.xx.xx.xx',port=3306,db='my1',password='')
db_connect('xx.xx.xx.xx','lrx',db='my1',password='',port=3306)
db_connect(ip='xx.xx.xx.xx','lrx',password='',db='my1',port=3306) #这样写报错
#位置参数在传参时,如果开头指定了xx=xx,后面必须都有使用这种格式;如果开头没有指定,就按默认顺序传值
  • 给参数一个提醒类型:调用时可以传入不同类型的参数,不受影响。
def my4(s:str,d:dict): #提示应该传字符串类型和字典类型
print(s)
print(d)
my4(123,'sdf') #传的是数字类型和字符串类型
#结果:
#
#sdf
#结果不报错,第一个是数字类型,第二个是字符串类型

2、默认值参数

  • xxx=xxx的格式
  • 是非必传参数
  • 调用时不填,就使用定义时的默认值
def db_connect(ip,port=3306):
print(ip,port) db_connect('xxx.xx.xx.xx')
#结果:
#xxx.xx.xx.xx 3306
  • 调用时填,就使用填的值
def db_connect(ip,port=3306):
print(ip,port) db_connect('xxx.xx.xx.xx',3307)
#结果:
#xxx.xx.xx.xx 3307

3、可变参数

  • 是非必传参数
  • 使用参数名前面加一个星号表示
  • 它把传入的元素都存到一个元组里
  • 不限制传入参数的个数
  • 用在参数比较多的时候
def send_sms(*phone_num): #*phone_num:可变参数,参数组
print(phone_num) send_sms()
send_sms('')
send_sms('','','')
#结果:
# ()
# ('1',)
# ('1', '2', '3')
  • 通常使用args作为参数名
def send_sms(*args): #*args:可变参数,参数组
for p in args:
print(p)

4、关键字参数

  • 是非必传参数
  • 使用参数名前面加两个星号表示
  • 不限制传参个数
  • 它是把传入的参数保存在一个字典里
  • 如果传参,必须要传位置参数这种xx=xx的格式,否则报错。
  • 通常使用kwargs当做变量名。
def send_sms2(**kwargs):
print(args) send_sms2()
send_sms2(addr='sfsdf')
send_sms2(name='xiaohei',sex='男')
#结果:
# {}
# {'addr': 'sfsdf'}
# {'name': 'xiaohei', 'sex': '男'}

5、参数组合使用

  • 如果一个函数中必须要使用4中参数,那么一定要按照顺序写参数:

        (1)位置参数(2)默认值参数(3)可变参数(4)关键字参数

def my(name,country='China',*args,**kwargs):
print(name)
print(country)
print(args)
print(kwargs)
my('xiaojun')
#结果:
# xiaojun
# China
# ()
# {}
def my(name,country='China',*args,**kwargs):
print(name)
print(country)
print(args)
print(kwargs)
my('xiaojun','Japan','beijing','天通苑',color='red',age=23)
#结果:
# xiaojun
# Japan
# ('beijing', '天通苑')
# {'age': 23, 'color': 'red'}
def my(name,country='China',*args,**kwargs):
print(name)
print(country)
print(args)
print(kwargs)
my('xiaojun')
my('xiaojun','beijing','天通苑',color='red',age=23)
#结果:
# xiaojun
# beijing
# ('天通苑',)
# {'age': 23, 'color': 'red'}
def my(name,country='China',*args,**kwargs):
print(name)
print(country)
print(args)
print(kwargs)
my('xiaojun',country='beijing','天通苑',color='red',age=23) #不可以,报错,因为传入了位置参数,后面就不能再直接传参了,也要使用xx=xx的格式
def my(name,country='China',*args,**kwargs):
print(name)
print(country)
print(args)
print(kwargs)
my('xiaojun','beijing','天通苑',color='red',age=23,country='hh')
#结果:
#TypeError: my() got multiple values for argument 'country'
#由于前面已经给默认值参数赋值为beijing了,后面再赋值,代码就不知道该怎么办了。

return的作用:

  • 结束函数,只要函数里面遇到return就马上结束。
  • 返回函数的处理结果。
def my2():
for i in range(50):
return i
print(my2())
#结果:
#

变量赋值:

  • 多变量赋值为数值,单变量赋函数值为元组:
def my3():
a=1
b=2
c=3
return a,b,c b,c,d=my3()
print(b,c,d)
s=my3()
print(s)
#结果:
#1 2 3
#(1, 2, 3)
  • 定义变量可以一起定义:
a,b,c=1,2,3

d=e=f=1

二、应用

1、操作文件:当不传默认值时,读文件,传字典时,写入json串。

import json
def op_file_tojson(file_name,dic=None):
if dic:
with open(file_name,'w',encoding='utf-8') as f:
json.dump(dic,f) else:
f=open(file_name,encoding='utf-8')
f.seek(0)
content=f.read()
if content:
res=json.loads(content.strip())
else:
res={}
f.close()
return res op_file_tojson('users.txt',{"abc":"","sgds":""})
print(op_file_tojson('users.txt'))
#结果:
#{'abc': '123', 'sgds': '3434'}

三、局部变量与全局变量

  • 局部变量:只能在函数内部使用,如果外面想要使用,只能通过return的方式。
  • 全局变量:在文件里都可以使用,如果函数内部没有定义该变量,函数内部需要使用时就使用全局变量。
name='lrx' #全局变量
def get_name():
name='abc'
print(name)
get_name()
#结果:
#abc name='lrx' #全局变量
def get_name():
#name='abc'
print(name)
get_name()
#结果:
#lrx
  • 想要修改全局变量,就要在变量前面先声明一下,使用global关键字
  • 只有string、int和元组才需要声明
name='lrx'
def get_name():
name='abc'
print(name)
get_name()
print('函数外面的name',name)
#结果:
#abc
#函数外面的name lrx

name='lrx'

def get_name():
global name
name='abc'
print(name)
get_name()
print('函数外面的name',name)
#结果:
#abc
#函数外面的name abc

小练习:

name='lrx'
def get_name():
global name
name='abc'
print('1、函数里面的name',name)
def get_name2():
print('2、get_name2',name)
get_name2()
get_name()
print('3、函数外面的name',name)
#结果:
#2、get_name2 lrx
#1、函数里面的name abc
#3、函数外面的name abc

Python之参数类型、变量的更多相关文章

  1. Python 函数参数类型大全(非常全!!!)

    Python 函数参数类型大全(非常全!!!) 1.在python编写程序里面具有函数文档,它的主要作用是为了让别人可以更好的理解你的函数,所以这是一个好习惯,访问函数文档的方式是: MyFuncti ...

  2. Python的参数类型

    参数类型: 1.必填参数,位置参数(positional arguments,官方定义,就是其他语言所说的参数) 2.默认值参数,非必传 3.可变参数,非必传,不限制参数个数,比如说给多个人发邮件,发 ...

  3. python函数参数类型及其顺序

    根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...

  4. Python各种参数类型

    1. Python的参数传递是值传递还是引 举例说明Python函数参数传递的几种形式,并说明函数传参是值传递还是引用传递 一.位置参数 调用函数时根据函数定义的参数位置来传递参数.例子: def p ...

  5. python可变参数类型 a,*args,**kwargs

    a - int *args --tuple **kwargs -- dict *args是非关键字参数,用于元组,**kw是关键字参数,用于字典 可变参数 在Python函数中,还可以定义可变参数.顾 ...

  6. python函数参数类型:位置参数、默认参数、动态参数、关键字参数

    1.位置参数:调用函数的时候传的参数,参数默认按顺序赋值,如果是指定那个参数赋值,不关注顺序.指定参数a=1,b=2 就在函数体内a=1,b=2 2.默认参数:在定义函数的时候,给某个参数设置默认值 ...

  7. Python函数参数的五种类型

    之前项目需求,需要通过反射获取函数的参数,python中可以通过函数签名(signature)来实现. 首先需要了解函数参数的类型,Python的参数类型一共有5种:POSITIONAL_OR_KEY ...

  8. python限定方法参数类型、返回值类型、变量类型等

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  9. Python函数小结(1)--参数类型(*, ** 的区别), 闭包

    刚开始学习python,python相对于java确实要简洁易用得多.内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来 ...

随机推荐

  1. Jenkins系统监测

    Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和 ...

  2. Python Numpy-基础教程

    目录 1. 为什么要学习numpy? 2. Numpy基本用法 2.1. 创建np.ndarry 2.2. Indexing and Slicing Boolean Index 2.3. Univer ...

  3. 《Java大学教程》--第1章 步入Java世界

    1.2 软件:用于计算机执行的指令的集合称之为程序(program).单个程序或者一组程序称之为软件(software)1.3 编译:计算机的语言称为机器码(machine code).用编译器(co ...

  4. python 初始socket

    一.网络基础 1.c\s架构:客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server 软件c\s架构:QQ.微信.优酷.暴风影音.浏览器(IE.火狐,360浏览器等): 软件b ...

  5. 【Linux基础】awk命令

    1.awk命令说明 (1)awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 (2)awk处理过程:  依次对每一行进行处理,然后输出 ...

  6. (转)Spring Boot (十九):使用 Spring Boot Actuator 监控应用

    http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html 微服务的特点决定了功能模块的部署是分布式的,大部分功能 ...

  7. (转)Spring Boot(五):Spring Boot Jpa 的使用

    http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...

  8. Jenkins+Ansible+Gitlab自动化部署三剑客-gitlab本地搭建

    实际操作 准备linux初始环境 关闭防火墙 systemctl stop firewalld 开机自己关闭 systemctl disable firewalld 设置安全配置 为关闭 vim /e ...

  9. o.s.b.d.LoggingFailureAnalysisReporter

    1.错误信息 *************************** APPLICATION FAILED TO START *************************** Descripti ...

  10. 90道Python面试题,做对80%直击年薪40w

    转发链接: 1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3.列出5个python标准库 os:提供了不少与操作 ...