一、参数类型

(一)形参与实参

  • 要使用局部变量时,只能通过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. June 15. 2018 Week 24th Friday

    If at first you don't succeed, then dust yourself off and try again. 失败了没关系,重振旗鼓,从头再来. From Aaliyah, ...

  2. Object类(根类)

    Object中的方法是所有类都有的方法,每个类默认继承了Object类. boolean  equals(Object obj) : Object中默认是比较地址,可以重写equals(Object ...

  3. JavaScript字符集

    引言 JavaScript程序使用Unicode字符集编写.Unicode是ASCII和Latin-1的超集,并支持地球上几乎所有在使用的语言.ECMAScript3要求JavaScript的实现必须 ...

  4. MySQL高级知识(十三)——表锁

    前言:锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算机资源(如CPU.RAM.I/O等)的争用外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是 ...

  5. postgresql命令

    连接数据库, 默认的用户和数据库是postgrespsql -U user -d dbname 切换数据库,相当于mysql的use dbname\c dbname列举数据库,相当于mysql的sho ...

  6. 6.03-news_xpath2

    import re import requests # 安装支持 解析html和XML的解析库 lxml # pip install lxml from lxml import etree url = ...

  7. 浅析SQLite的锁机制和WAL技术

    锁机制 SQLite基于锁来实现并发控制.SQLite的锁是粗粒度的,并不拥有PostgreSQL那样细粒度的行锁,这也使得SQLite较为轻量级.当一个连接要写数据库时,所有其它的连接都被锁住,直到 ...

  8. centos7下kubernetes(4.kubernetes组件)

    Kubenetes cluster 由master和node组成 Master是kubenetes的大脑.运行着以下进程:kube-apiserver.kube-scheduler.kube-cont ...

  9. centos7下安装docker(15.7容器跨主机网络---calico)

    Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...

  10. CSAPP:第一章计算机系统漫游

    CSAPP:计算机系统漫游 关键点:上下文.程序运行.计算机系统抽象. 信息就是位+上下文一个程序的运行过程系统的硬件组成编译系统是如何工作的?一个程序的运行过程(c语言举例)计算机系统中的抽象 信息 ...