http://docs.python.org/2/library/json.html
JSON может решить эту проблему, хотя его декодер хочет получить двойные кавычки вокруг ключей и значений. Если вы не против замены hack ...
import json
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
json_acceptable_string = s.replace("'", "\"")
d = json.loads(json_acceptable_string)
# d = {u'muffin': u'lolz', u'foo': u'kitty'}
Учтите, что если у вас есть одинарные кавычки в качестве части ваших ключей или значений, это не будет выполнено из-за неправильной замены символа. Это решение рекомендуется только в том случае, если у вас есть сильное отвращение к eval-решению.
Подробнее о json single quote: jQuery одинарная кавычка в ответе JSON
Нет, это запрещено. На самом деле, вы даже не можете передавать общие функции INTRINSIC в качестве фиктивных аргументов.
Стандартный способ - это использовать прямые конкретные функции напрямую. С помощью функций INTRINSIC вы иногда должны писать оболочку для правильного типа, когда конкретный не имеет стандартного имени.
Например:
call integrate(derf,0.,1.)
contains
function derf(x)
real(dbl) :: derf
real(dbl), intent(in) :: x
derf = erf(x)
end function
end
необходимо, если вы хотите передать реальную (или любую другую) версию с двойной точностью erf()
, поскольку нет никакой конкретной функции.
Стандарт Fortran не позволяет передавать общие процедуры в качестве аргументов. Чтобы передать внутренние функции / подпрограммы, нужно прибегнуть к пользовательским процедурам обертки.
module mymod
! Explicit typing only
implicit none
! Declare procedure interface
interface
function my_func(x, y) result (return_value)
real, intent(in) :: x, y
real :: return_value
end function my_func
end interface
contains
function func1(x) result (return_value)
real,intent(in) :: x
real :: return_value
return_value = 2*x
end function func1
function func2(x, y) result (return_value)
real, intent(in) :: x, y
real :: return_value
return_value = 2*x + 3*y
end function func2
function func3(user_defined_func, x, y) result (return_value)
procedure(my_func) :: user_defined_func
real, intent(in) :: x, y
real :: return_value
return_value = user_defined_func(x,y)
end function func3
end module mymod
program main
use ISO_Fortran_env, only: &
stdout => OUTPUT_UNIT, &
compiler_version, &
compiler_options
use mymod
! Explicit typing only
implicit none
write (stdout, *) func3(func2, 2.0, 3.0)
write (stdout, *) func3(foo, 2.0, 3.0)
write (stdout, *) func3(my_atan2, 2.0, 3.0)
print '(/4a/)', &
' This file was compiled using ', compiler_version(), &
' using the options ', compiler_options()
contains
! A user defined function
function foo(x, y) result (return_value)
real, intent(in) :: x, y
real :: return_value
return_value = 42
end function foo
! A wrapper function to invoke the intrinsic atan2
function my_atan2(x, y) result (return_value)
real, intent(in) :: x, y
real :: return_value
return_value = atan2(x,y)
end function my_atan2
end program main
дает
gfortran -std=f2008ts -o main.exe mymod.f90 main.f90
./main.exe
13.0000000
42.0000000
0.588002622
This file was compiled using GCC version 6.1.1 20160802 using the options -mtune=generic -march=x86-64 -std=f2008ts