一、参数类型

(一)形参与实参

  • 要使用局部变量时,只能通过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. python--私有属性--私有方法

    Class 定义类 def 初始化方法(形参) 属性1 属性2   私有属性(属性之前加--) def  方法1() print() 属性和方法定义好以后,在创建对象 对象=类名(“”) print( ...

  2. 将web项目部署到阿里云服务器上

    一.用eclipse将写好的项目打成war包 1.右键点击项目,选择Export 选择打包之后的路径,点击Finsh. 2.购买阿里云服务器 按下图选择 3.设置云服务器防火墙 4.远程连接云服务器 ...

  3. LeetCode算法题-Path Sum(Java实现)

    这是悦乐书的第169次更新,第171篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112).给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路 ...

  4. Markdown语法大全

    目录 前言: 1.Markdown基础用法 1.1 目录 1.2 标题 1.3 字体样式 1.4 引用 1.5 图片 1.6 超链接 1.7 列表 1.8 表格 1.9 代码 1.10 流程图 1.1 ...

  5. Nginx 安装配置

    Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...

  6. Django-rest-framework 接口实现 rest_framework 中有已经定义好的 工具类 mixins generics viewsets

    rest_framework.mixins 请求业务 的 5 种实现 ​ mixin(混合类):不能单独使用,和其它类搭配起来使用(利用了Python支持多继承) rest_framework.mix ...

  7. spring boot监控--actuator

    原文地址:http://blog.csdn.net/wh_ouyangshuang/article/details/48048111 spring-boot-actuator模块提供了一个监控和管理生 ...

  8. PHP到底有多牛?你所知道的网站都在用它

    PHP到底有多牛?你所知道的网站都在用它 提起PHP,很多人的第一印象就是网站开发,确实,在网站开发方面,PHP难逢对手,当之无愧是“世界上最好的语言”. 有数据显示,目前全球5000万互联网网站中, ...

  9. P2678 跳石头(二分+模拟)

    思路: 我觉得我现在有一个非常不好的习惯,那就是不爱画图.当我把这个题的检验函数用图来表示出来.感觉就非常好理解了. 直接说检验函数吧.就是非常简单的模拟,我现在换成角度来说:假设你最小能跳x(不能跳 ...

  10. PHP 5 全局变量 - 超全局变量

    PHP 全局变量 - 超全局变量 PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. ...