#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/8/22 15:39
# @Author : limingyu
# @Site :
# @File : Test_Function.py
# @Software: PyCharm
#函数传参数几种形式
#1、普通参数(严格按顺序来,将实际参数赋值给形式参数)
#2、默认参数(必须放置在参数列表的最后)
#3、指定参数(将实际参数赋值给指定的形式参数)
#4、动态参数:*形参数(定义函数时有*,普通传值,将传入的所有值放到元组中,当做一个元素
# 传值时加上*,将每一个元素转化到元组的元素里,内部有个for循环,循环每个元素到元组中)
# * 默认将传入的参数,全部放置在元组中,f1(*[12,3,4])
# ** 默认将传入的参数,全部放置在字典中 f1(**{'k1':'v1','k2':'v2'})
#5、万能参数
# *形参数
def f1(*args):
print(args,type(args))
f1(11) #(11,) <class 'tuple'>
li = [1,2,"liming","dd"]
f1(li) #([1, 2, 'liming', 'dd'],) <class 'tuple'>
f1(*li) #(1, 2, 'liming', 'dd') <class 'tuple'>
li = "liming"
f1(*li) #('l', 'i', 'm', 'i', 'n', 'g') <class 'tuple'>
# ** 形参数:
def f1(**args):
print(args,type(args))
f1(n1="liming" ,n2=18) #{'n1': 'liming', 'n2': 18} <class 'dict'>
dic = {'k1':'v1','k2':'v2'}
f1(kk=dic) #{'kk': {'k1': 'v1', 'k2': 'v2'}} <class 'dict'>
#f1(dic) #TypeError: f1() takes 0 positional arguments but 1 was give
#循环每一个k,v,直接赋值
f1(**dic) #{'k1': 'v1', 'k2': 'v2'} <class 'dict'>
#*放在前面,**放在后面
def f2(*args, **kwargs):
print(args)
print(kwargs)
f2(11,22,33,k1='v1',k2='v2')
#(11, 22, 33)
#{'k1': 'v1', 'k2': 'v2'}
#格式化两种方式
#1、"%s,%d"
#2、str format格式化输出,用占位符;def format(*args, **kwargs):
s1 = 'i am {0},age {1}'.format("liming",15)
print(s1) #i am liming,age 15
s2 = 'i am {0},age {1}'.format(*["liming",15])
print(s2) #i am liming,age 15
s1 = "i am {name},age {age}".format(name='liming',age=15)
print(s1) #i am liming,age 15
dic = {'name':'liming',"age":15}
s2 = "i am {name},age {age}".format(**dic)
print(s2) #i am liming,age 15
#函数补充1:有相同的函数,如何执行?
def f1(a1,a2):
return a1 + a2
def f1(a1,a2):
return a1 * a2
ret = f1(8,8)
print(ret) #64
##函数补充2:函数传参时,传的是引用
def f1(a1):
a1.append(999)
li = [11,22,33,44]
f1(li)
print(li) #[11, 22, 33, 44, 999]
#函数补充3:全局变量,所有作用域可读,全部大写
#对全局变量进行重新赋值,需要global
#特殊:字典,列表,可修改,不可重新赋值
NAME = "liming"
LI = [11,22,33,44]
def f1():
age = 14
global NAME #表示name是一个全局变量
NAME = "xiaoran" #对全局变量进行更改
LI.append(777)
#li = 2222 #不能赋值
print(NAME,age,LI)
def f2():
age = 17
print(NAME,age)
f1() #xiaoran 14 [11, 22, 33, 44, 777]
f2() #xiaoran 17